先分清抓取、渲染与索引
浏览器里能看到正文,不代表服务器返回的初始 HTML 已包含它;初始 HTML 没有正文,也不能单凭这一点断定搜索引擎看不到。Google 会抓取页面并在后续渲染阶段执行 JavaScript,但资源访问、脚本运行和排队时间都会影响结果。即使 Google 能渲染,也不等于页面一定进入索引;其他搜索引擎的处理方式也不能从 Google 的结果推断。
本文只解决一个问题:目标 URL 的初始 HTML 和执行脚本后的页面,是否包含搜索引擎需要理解的主要正文与可抓取链接?若内容已经正确呈现但仍未收录,应转到网站页面不被收录排查清单;robots、canonical 和站点地图的全站配置见SEO基础架构全指南。
先选定一个可复测的 URL
挑选一篇公开文章或一个重要落地页,记录完整 URL、检查时间、要验证的搜索引擎,以及页面中必须出现的标题、正文片段和内部链接。整个检查过程都使用同一个规范 URL,不要拿首页的渲染结果推断其他模板。
下文用本站文章 https://blog.zenleak.cn/post/274/ 演示命令。检查其他网站时,将它换成你有权限检查的实际页面地址。
检查服务器返回的初始 HTML
先确认最终响应状态、重定向次数和最终地址,再保存服务器返回的 HTML:
PAGE_URL='https://blog.zenleak.cn/post/274/'
curl -sS -L -D /tmp/render-headers.txt -o /tmp/render-page.html \
-w 'HTTP %{http_code}; redirects %{num_redirects}; final %{url_effective}\n' \
"$PAGE_URL"
查看 /tmp/render-headers.txt 中的响应头和 /tmp/render-page.html,搜索页面标题、H1、正文中的独特句子,以及需要的 <a href="..."> 链接。还要确认最终地址是预期的规范地址,响应不是登录页、错误页或空壳模板。HTTP 200 只说明服务器返回了成功响应,不代表搜索引擎已抓取或收录。
如果初始 HTML 已包含主要正文和普通链接,说明这部分内容不依赖浏览器执行脚本才出现。若正文缺失,继续对照浏览器和搜索引擎测试,不要立刻把它判定成索引故障。
对照浏览器渲染后的页面
在浏览器打开同一个 URL,使用开发者工具检查最终 DOM 中的主标题、关键正文和链接。然后在 Network 面板重新加载页面,检查负责生成正文的 JavaScript、数据接口和样式资源是否返回成功;在 Console 面板查看运行错误。重点区分正文和导航所需资源,以及不影响阅读的装饰效果。
可以暂时禁用 JavaScript 再加载一次,观察哪些内容只在脚本执行后出现。这只是定位依赖关系的对照测试,不是搜索引擎渲染行为的模拟。若正文依赖接口请求,检查该请求是否返回预期数据,以及是否被权限、跨域策略、缓存或脚本错误挡住。
可抓取的导航应使用带有真实目标地址的 HTML 链接,例如 <a href="/post/288/">索引排查清单</a>。仅绑定 onclick 的按钮、没有 href 的自定义组件或必须先操作页面才能发现的链接,不应代替普通导航链接;Google 的可抓取链接最佳实践也说明了链接元素的要求。URL 命名和迁移规则另见URL 结构优化指南;站内链接发现与孤立页面检查见站内链接审计实战。
用目标搜索引擎的工具复核
如果要检查 Google,在已验证的网站资源中打开 Search Console 的“网址检查”,对同一个 URL 执行实时测试,并检查测试截图、渲染后的 HTML 和未能加载的资源。实时测试反映 Google 检查工具当前能否抓取和渲染页面;它不检查所有索引条件,也不保证该 URL 最终会被收录。索引版本和实时测试回答的是不同问题。
这项结果只适用于 Google 的检查工具,不能代替百度或 Bing 的验证。检查其他搜索引擎时,应使用对应站长平台当前提供的 URL 检查能力,并按该平台的说明解释结果;不要把某个平台的成功提示写成跨平台结论。
从服务器日志确认请求
把访问日志与测试时间对齐,核对目标页面、脚本文件和数据接口的请求路径、响应码及请求时间。一次页面 HTML 请求成功,不代表相关脚本和接口也成功;资源请求通常会是独立日志记录。
日志里的 User-Agent 可以被任意客户端伪造。出现 Googlebot 字样只能作为排查线索,不能单凭它确认真实 Google 爬虫。Google 官方建议通过请求 IP 的反向 DNS 查询并正向解析回同一 IP,或与官方公布的爬虫 IP 范围核对。该验证流程针对 Google;其他引擎应使用各自的官方验证方法。
按故障所在层处理
| 观察结果 | 优先检查 | 常见处理方向 |
|---|---|---|
| 初始 HTML 和浏览器都缺正文 | 页面数据、模板输出、接口响应和应用错误 | 先修复内容生成或接口,再复测同一 URL |
| 初始 HTML 缺正文,浏览器能显示 | Google 实时测试中的渲染 HTML、脚本和接口资源 | 确保关键资源可访问;必要时考虑服务端渲染、静态预渲染或 HTML 备用内容 |
| 正文可见,但关键链接不是普通链接 | 最终 DOM 中的链接元素和目标地址 | 输出语义化 <a href>,让链接无需点击按钮即可被发现 |
| 渲染后的正文和链接正常,但页面仍未收录 | 索引状态、规范地址、页面内容和发现路径 | 按未收录排查清单继续诊断,不要把收录问题归因于 JavaScript |
如果修改了渲染方式,在同一 URL 上重复初始 HTML、浏览器 DOM 和目标搜索引擎实时测试,并保存修改前后的日期、状态码、缺失资源和结果。脚本渲染正确是排除一种故障的证据,不是排名或收录承诺。图片、字体和布局资源导致的页面体验问题,可参照Django 文章页 Core Web Vitals 实战单独测量。
复测时记录这些字段
| 项目 | 记录 |
|---|---|
| 页面 URL 与检查时间 | 规范 URL;带时区的时间 |
| 搜索引擎与工具 | 浏览器、Google Search Console 或对应站长平台 |
| HTTP 响应 | 最终状态码、重定向次数和最终地址 |
| 初始 HTML | 主标题、正文片段、必要链接是否存在 |
| 浏览器渲染 DOM | 正文与链接是否出现;Console/Network 错误 |
| 失败资源 | 请求 URL、状态码和对正文的影响 |
| 修复与复测 | 修改内容、复测时间和同一项的结果 |
参考资料
- Google 搜索中的 JavaScript SEO 基础
- 排查 JavaScript 搜索问题
- Search Console 网址检查工具
- Google 可抓取链接最佳实践
- 验证 Google 请求
- Google 爬虫概览
- 百度搜索资源平台
抓取、渲染和索引是相互关联但不同的环节。用同一页面、同一时间范围和对应平台的工具分别验证,才能知道问题发生在哪一层。
评论 (0)
暂无评论,快来抢沙发吧!