You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面加载前执行JS函数,让搜索引擎爬虫获取API返回的标题?

解决动态标题无法被爬虫抓取的问题

你的核心问题在于:当前用客户端JavaScript动态修改<title>的方式,绝大多数网络爬虫不会执行JS代码,所以爬虫爬取到的始终是初始的Test title,无法获取到API返回的真实标题。

下面是几种可靠的解决方案:

1. 服务端渲染(最推荐)

直接在服务器端请求API获取标题,把标题写入HTML的<title>标签后再返回给客户端。这样爬虫拿到的HTML里已经包含了正确的标题,完全不需要依赖JS执行。

举个Node.js Express的实现例子:

app.get('/', async (req, res) => {
  // 先设置兜底标题
  let pageTitle = 'Test title';
  try {
    // 服务器端请求API
    const apiRes = await fetch('https://endpoint.com');
    const data = await apiRes.json();
    // 替换为API返回的标题
    pageTitle = data.title;
  } catch (err) {
    console.error('获取标题失败:', err);
  }
  // 返回包含正确标题的HTML
  res.send(`
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta name="description" content="Test description" />
        <title>${pageTitle}</title>
      </head>
    <body></body>
    </html>
  `);
});

2. 预渲染

如果没法做服务端渲染,可以用预渲染工具,在构建阶段或者用户请求时提前渲染页面,把动态生成的标题固化到HTML中。爬虫访问时拿到的是已经渲染完成的页面,自然能抓取到正确标题。

3. 静态生成框架(SSG)

使用Next.js、Gatsby这类支持静态生成的框架,在构建阶段或者增量静态再生时请求API获取标题,生成包含正确标题的静态HTML文件。爬虫直接抓取静态文件,就能拿到正确的标题。

可选:保留客户端JS作为补充

如果需要在浏览器里给用户更新最新标题,可以保留客户端JS逻辑,但必须确保初始HTML里的<title>已经是爬虫能抓取到的正确内容,客户端JS只是做二次更新:

<!DOCTYPE html>
<html lang="en">
  <head>
      <meta name="description" content="Test description" />
      <!-- 这里是服务端/预渲染生成的正确标题,爬虫直接读取 -->
      <title>API返回的标题</title>

      <script>
        document.addEventListener('DOMContentLoaded', function () {
          const apiEndpoint = 'https://endpoint.com';
          fetch(apiEndpoint)
            .then(res => res.json())
            .then(data => {
              document.title = data.title; // 浏览器端更新标题给用户看
            })
            .catch(() => {
              document.title = '兜底标题';
            })
        })
      </script>
    </head>
<body></body>
</html>

核心原则就是:让标题在初始HTML响应中就存在,不要依赖客户端JS动态生成,这样所有爬虫都能正确抓取到你想要的标题。

内容的提问来源于stack exchange,提问作者Daniel Greatman Walter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:56:22