先用 curl 保存服务器返回的原始 HTML,再用浏览器禁用 JavaScript 对比首屏正文、标题和链接。随后在 Search Console 的网址检查或富媒体搜索结果测试中查看渲染后的 HTML、截图、资源错误和控制台异常。确保关键正文与导航不依赖点击、滚动或登录才出现;链接使用带真实 href 的 <a;Canonical、robots、状态码和 Sitemap 指向同一最终 URL。若客户端渲染经常失败,优先使用服务端渲染或预渲染输出关键内容。
直接答案
先用 curl 保存服务器返回的原始 HTML,再用浏览器禁用 JavaScript 对比首屏正文、标题和链接。随后在 Search Console 的网址检查或富媒体搜索结果测试中查看渲染后的 HTML、截图、资源错误和控制台异常。确保关键正文与导航不依赖点击、滚动或登录才出现;链接使用带真实 href 的 <a;Canonical、robots、状态码和 Sitemap 指向同一最终 URL。若客户端渲染经常失败,优先使用服务端渲染或预渲染输出关键内容。
一、先确认是发现、抓取、渲染还是索引问题
页面没有出现在搜索结果中,可能发生在不同阶段。没有任何抓取记录,通常先检查站内链接、Sitemap、robots.txt 和服务器可达性;抓取成功但渲染内容缺失,应检查 JavaScript 与 API;渲染正常却未索引,则继续检查重复内容、Canonical、noindex、软 404 和内容价值。
记录目标 URL、最后抓取时间、HTTP 状态、Canonical、robots 指令、原始 HTML 字节数、渲染后正文长度与错误资源。不要只凭 site: 查询判断索引状态,因为它不是完整诊断工具。
还要保存同一 URL 在桌面端和移动端抓取条件下的证据,并记录响应头、重定向链和最终地址。只有把问题稳定复现,后续修复才不会被缓存命中或偶然成功误导。
二、比较原始 HTML 与渲染 DOM
使用命令行请求页面,确认响应是最终的 200 页面,而不是空应用壳、登录页、挑战页或带错误内容的 200。检查 <title、meta robots、Canonical、主标题、正文摘要和关键链接是否已经存在。
再在浏览器中检查执行 JavaScript 后的 DOM。若正文只在渲染后出现,必须验证数据接口对爬虫可访问、资源没有被 robots 阻止、脚本不会因 Cookie、地理位置或本地存储缺失而异常。关键内容放入服务端 HTML 可降低渲染失败和延迟风险。
三、检查脚本、样式和数据接口
在网络面板中按状态码筛选 JavaScript、CSS、字体、图片和 API 请求。重点处理 401、403、404、429、5xx、证书错误、CORS 失败和超时。脚本文件使用哈希命名时,入口 HTML 必须引用当前版本,旧入口缓存不能继续加载已经删除的资源。
Google 的 Web Rendering Service 可能不会获取对核心内容无用的请求。不要把正文依赖在分析脚本、广告回调或只对真实用户开放的接口上。页面初始化失败时,应保留可读的服务端内容,并把组件异常记录到监控系统。
四、链接必须可发现
站内导航和正文链接应使用 <a href="https://example.com/path/"。只有 onclick、按钮、路由对象或鼠标事件而没有可解析 href 的控件,不是可靠的发现入口。链接目标应是可抓取的最终 URL,避免多跳重定向、片段路由和一次性令牌。
无限滚动页面还要提供可独立访问的分页 URL,并让每一页通过链接连接。只在用户滚动到底部后请求的新内容,不能假定爬虫一定会触发相同交互。
五、Canonical、状态码和 robots 要一致
最终页面应返回正确的 HTTP 状态。不存在的内容应返回 404 或 410,服务器错误应返回 5xx,不要让所有路由都返回应用壳和 200。页面 Canonical 应指向希望索引的最终地址;Sitemap 和站内链接也应使用该地址。
不要在初始 HTML 中输出 noindex,再指望 JavaScript 删除它。Google 官方文档指出,发现 noindex 后可能跳过渲染与脚本执行。robots.txt 也不应阻止渲染关键内容所需的脚本或页面。
六、正确实现懒加载
图片和非首屏模块可以懒加载,但不能要求点击、滑动或输入后才加载希望索引的正文。优先使用浏览器原生图片懒加载,或用 IntersectionObserver 在元素进入视口附近时请求资源,同时提供稳定的宽高和替代文本。
验证时直接访问深层 URL,刷新页面并在慢速网络下观察。若组件必须依赖路由切换才能显示,搜索引擎从外部链接直接进入时可能只得到空状态。
七、渲染方案怎么选
服务端渲染、静态生成和增量静态生成都能让关键内容进入初始 HTML。客户端渲染适合登录后应用与强交互组件,但公开落地页、文章、产品和分类页应优先保证无 JavaScript 时仍有核心信息。
动态渲染是给特定爬虫返回预渲染版本的临时解决方案,Google 将其视为变通方案而不是推荐长期架构。若使用,必须保证给爬虫和用户的内容实质一致,避免形成难以维护的双版本。
八、上线验收清单
原始 HTML 包含唯一标题、主标题、摘要和核心正文。
页面及依赖资源返回预期状态码。
渲染 DOM 与用户可见内容一致。
控制台没有未处理异常或 Promise rejection。
关键链接是带 href 的可访问锚点。
Canonical、Sitemap、内链和重定向目标一致。
无误留 noindex 或 robots 屏蔽。
移动端正文完整,没有因懒加载或断点被裁切。
九、常见错误
只检查浏览器最终画面,不保存原始 HTML。
正文依赖登录态、Cookie 或本地存储。
使用按钮和点击事件代替真实链接。
初始 HTML 带 noindex,再由脚本移除。
无限滚动没有分页 URL。
API 对普通浏览器成功,对爬虫返回 403 或 429。
Canonical 指向旧域名、首页或错误参数版本。
所有不存在路由都返回 200 应用壳。
十一、总结
JavaScript SEO 的核心不是“搜索引擎会不会运行脚本”,而是关键内容能否通过稳定 URL 被发现、抓取、渲染并获得一致的索引信号。用原始 HTML 与渲染 DOM 的差异建立证据,再修复资源、链接、状态码、Canonical 和懒加载,才能把偶发不收录转化为可重复验证的工程问题。
官方参考资料
Google Search Central:Understand JavaScript SEO basics,https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics(核验日期:2026-08-29)
Google Search Central:Fix Search-related JavaScript problems,https://developers.google.com/search/docs/crawling-indexing/javascript/fix-search-javascript(核验日期:2026-08-29)
Google Search Central:Fix lazy-loaded content,https://developers.google.com/search/docs/crawling-indexing/javascript/lazy-loading(核验日期:2026-08-29)
Google Search Central:Dynamic rendering as a workaround,https://developers.google.com/search/docs/crawling-indexing/javascript/dynamic-rendering(核验日期:2026-08-29)
常见问题
Google 会执行 JavaScript 吗?
会,但抓取、渲染和索引是不同阶段,资源访问、执行错误和渲染排队都可能造成内容缺失。关键公开内容不应只依赖脆弱的客户端执行链。
客户端渲染一定不能做 SEO 吗?
不是。只要 URL 可发现、资源可访问、渲染稳定且索引信号正确,客户端渲染内容可以被处理;服务端输出关键内容通常更稳、更容易诊断。
为什么浏览器正常,网址检查却是空白?
常见原因是 API 鉴权、地区或 User-Agent 分流、资源被阻止、渲染超时、脚本异常,或页面依赖 Cookie 和交互。对比两边的请求与控制台记录可以定位差异。
懒加载内容能被收录吗?
可以,但内容应在视口附近自动加载,不能依赖点击或滚动事件;无限列表还需要可抓取的分页链接。