頁面在浏览器里打開一切正常,正文、图片、内鏈都在,但抓取工具拿到的却像一份空壳 HTML——标题有了,内容区是空的,導航連結也点不開。這類問题多半不是“收錄慢”,而是内容压根没出現在搜尋引擎能讀到的那份文档里。下面按五步核對,找到卡住的环节。
先接受一個前提:你看到的頁面和抓取到的頁面可能不是同一份
現代搜尋引擎會执行 JavaScript,但执行是有代價的:需要排队、需要下载脚本、需要調用接口,還有超时限制。這意味着“能渲染出来”和“稳定渲染出来”是两回事。有些頁面在測試工具里渲染正常,在真實抓取时因為接口超时或资源被拦,渲染结果就是残缺的。所以第一步不是改代碼,而是先確認差异到底有多大。
第一步:把原始 HTML 和渲染後结果分開看
大多數站長工具和 URL 检查功能都會给出两個视图:一個是服務器直接返回的原始 HTML,一個是执行脚本後的渲染结果。重点看三样東西:
- 正文主体:原始 HTML 里有没有完整的文字内容,還是只有一個空的容器标簽。
- 站内連結:導航、面包屑、文章底部的相關阅讀,是否是 JS 注入的。
- canonical、hreflang、meta robots:這些信号如果只在渲染後才出現,容易與頁面實际狀態對不上。
如果這三样在原始 HTML 里都缺失,問题就不在收錄环节,而在渲染鏈路。
第二步:分清頁面的渲染方式,處理路径完全不同
服務端渲染(SSR)
HTML 由服務器生成後再返回。這是最稳的方式,抓取时不需要执行脚本就能拿到完整内容。如果這類頁面仍然没被收錄,方向應该轉向 URL 規范、内容质量或抓取配額,而不是怀疑渲染。
動態渲染
對普通用戶返回 JS 版本,對爬虫返回预渲染版本。要注意预渲染内容與用戶看到的是否一致,以及预渲染服務是否稳定。一旦维護中断,爬虫拿到的可能就是空壳。
纯客戶端渲染(CSR)
HTML 几乎是空的,靠脚本拉資料拼頁面。風險最高:脚本执行失敗、接口超时、渲染队列拥挤,任何一环出問题都會導致内容不可见。關键頁面建议逐步改成 SSR,而不是長期依赖渲染碰运气。
第三步:核對渲染所需资源有没有被挡住
這是一處很容易被忽略的坑。robots.txt 里為了减少抓取,常有人顺手屏蔽脚本目錄或接口路径,比如 /static/js/、/assets/、/api/。對普通用戶没有影响,對渲染却是致命的:脚本拉不下来,接口調不通,頁面自然渲染不出内容。
核對方法很简單:把 robots.txt 里的 Disallow 規則逐條對照渲染實际依赖的资源,看有没有誤伤。同时確認這些资源没有返回 403 或 5xx。
第四步:判断内容是否藏在交互之後
折叠面板、選項卡、点击“展開全文”、無限滚動加载,這些交互在用戶体驗上是加分項,但内容可能不在初始渲染结果里。如果核心正文需要点击才能出現,收錄结果里就可能只有标题和一小段引導语。
判断标准很直接:不点击、不滚動,頁面里能讀到多少有效信息?如果核心结论、關键資料、主要内鏈都需要操作才能看到,就值得把一部分内容挪回初始 HTML。
第五步:URL 的發現路径是否也依赖 JavaScript
抓取和收錄是两個阶段,先要發現 URL。如果新頁面的入口只存在于 JS 生成的列表里,爬虫未必能顺着找到。可以用禁用脚本的方式打開頁面,看連結是否還留在 HTML 中。常见补法是在服務端輸出的 HTML 里保留一层基础連結,比如分類頁第一頁、最新文章列表。
一份可以照着走的核對清單
- 對比原始 HTML 與渲染後结果,列出差异項。
- 確認頁面属于 SSR、動態渲染還是 CSR。
- 逐條检查 robots.txt 是否屏蔽了脚本或接口资源。
- 關閉脚本後浏览頁面,看核心内容與連結還剩多少。
- 检查折叠、選項卡、懒加载里的内容是否属于關键信息。
- 確認 canonical、meta robots 出現在原始 HTML 中。
- 用無 JS 环境驗證站内連結是否可被發現。
把關键内容放進初始 HTML,通常是成本最低、收益最确定的一步。渲染方式可以慢慢重构,但正文、内鏈和收錄類标簽不该長期依赖脚本生成。
做完這五步,你大概率能定位到是资源被拦、渲染超时,還是内容本来就藏在交互里。剩下的工作就是把该回到 HTML 的部分挪回去,然後按正常节奏观察抓取和索引狀態的變化。