頁面在浏览器里打開一切正常,标题、正文、图片都在,可在搜尋蜘蛛的工具里查抓取结果时,拿到的 HTML 却只有導航和頁脚;或者索引里留下一條几乎没有内容的记錄。這類情况多數不是被惩罚,而是正文根本没有出現在蜘蛛第一次取回的那份 HTML 里。
搜尋蜘蛛第一眼看到的是 HTML 源碼
現在的搜尋引擎具备渲染 JavaScript 的能力,但渲染是排在抓取之後的獨立环节,並且有队列和配額。一個 URL 被請求时,搜尋引擎先拿到的是服務器直接返回的源碼;如果正文靠脚本在浏览器里拼出来,這一步拿到的就可能是空壳。
渲染需要排队,頁面越重、脚本越多,等得越久。表現就是“抓了但没内容”“收錄了但索引里只有框架”,甚至長期停在某個中間狀態,既不前進也不消失。
先確認正文有没有進入抓取结果
- 看網頁源代碼,而不是“审查元素”。右键查看源代碼得到的是服務器返回的原始 HTML,元素面板顯示的是脚本执行後的结果,两者经常不一样。
- 用命令行請求一次,例如 curl 或 wget,看看返回体里到底有没有正文文字。
- 在搜尋蜘蛛的站長工具里查“已抓取的 HTML”,直接和源代碼對比。
- 翻服務器日誌,確認搜尋蜘蛛請求了哪些 URL、返回什么狀態碼,以及有没有請求正文依赖的接口。
几種容易让正文消失的寫法
- 纯客戶端渲染:HTML 只輸出一個挂载节点,所有内容等脚本执行完再插入。
- 正文来自接口:頁面是骨架,文字靠异步請求填進去,蜘蛛不一定等到接口返回就結束抓取。
- 内鏈只在脚本里生成:連結不是 a 标簽的 href,而是点击事件,蜘蛛顺着走的时候看不到指向其他頁面的路径。
- 關键内容折叠或藏在标簽頁里:預設不展開的部分,被抓到时可能被一並省略。
- 正文、评论、參數表也做懒加载:图片懒加载影响有限,但文字内容懒加载,漏掉的風險就明顯上升。
让首屏内容直接出現在 HTML 里
- 标题、正文主体、主要内鏈尽量由服務端輸出,脚本只负责交互增强。
- 如果整套前端是客戶端渲染,考虑服務端渲染或预渲染,至少覆盖詳情頁和栏目頁。
- 分頁、相關推荐、面包屑使用真實的 a 标簽和 href,方便蜘蛛顺着走。
- 接口尽量稳定快速,避免蜘蛛在等待中放弃或只拿到半截内容。
- 把最重要的 URL 放進站点地图,给蜘蛛留一條不依赖脚本的入口。
抓到空壳之後會發生什么
拿到没有正文的 HTML,搜尋引擎可能先不收錄,可能收錄一個只有導航的版本,也可能判定頁面内容單薄而降低抓取频率。這时候反复提交 URL、堆外鏈作用有限,先把抓取到的内容补齐更實际。使用蜘蛛池或其他引流手段时也一样,蜘蛛愿意来不等于頁面有東西可看,抓取入口和頁面本身的内容要分開看。
不要用脚本专门给搜尋蜘蛛輸出一份隐藏内容。抓取和渲染的结果最终會與真實用戶看到的頁面比對,做两套内容的收益很低,風險却不小。
遇到“收錄了但索引里没内容”的情况,顺序通常是:先確認抓取到的 HTML 有没有正文,再確認脚本渲染是否及时到位,最後才讨论收錄數量和展現形式。把第一步查清楚,後面的判断會简單很多。