頁面在浏览器里顯示正常,不代表蜘蛛拿到的也是同一份内容。現在不少站点的正文、列表、甚至内鏈,都是等 JavaScript 执行完之後才塞進頁面的。人看着没問题,蜘蛛如果不执行脚本,抓到的就只是一個空壳。這一篇讲的是怎么把這個問题查出来。
為什么前端渲染容易挡住内容
传统抓取是“取 HTML、解析連結、入库”三步。当正文和連結都由脚本生成时,第一步拿到的 HTML 里可能只有几個容器节点和一段脚本,标题、正文、翻頁連結全都不在。搜尋引擎的渲染能力在提升,但渲染是有成本、有延迟、也可能失敗的。對站点来说,等于把“能不能被發現”這件事交给了別人队列里的运气。
對依赖 URL 發現的站点来说,這個問题更明顯:列表頁如果用脚本分頁、加载更多,新内容就没有一條静態可爬的入口路径,後面再谈收錄就少了一個前提。
三個不需要专业工具的自查動作
一、打開“查看網頁源代碼”
在浏览器里查看源碼,然後在源碼中搜尋文章标题里的一句话。搜不到,基本可以確認正文是渲染出来的。再搜一下連結的 href,如果栏目列表里的地址在源碼中找不到,說明内鏈也没有暴露出来。
二、禁用 JavaScript 訪問一次
浏览器可以临时禁用 JavaScript,或者用命令行直接抓一次頁面。此时頁面應该仍然有可讀的标题、正文和導航連結。如果只剩下一句“請開啟 JavaScript”,那就是很明确的信号。
三、對照日誌和抓取结果
看服務器日誌里蜘蛛請求的响應大小。一個正常的内容頁 HTML 通常不會只有几 KB;如果同一批 URL 的响應体普遍偏小,可能就是只返回了容器和脚本。同时可以看抓取工具给出的“渲染後頁面”和“原始 HTML”是否一致,差异越大越需要處理。
容易忽略的几個位置
- 列表與翻頁:点“加载更多”才出内容,蜘蛛看不到第二頁之後的地址。
- 相關推荐與面包屑:由脚本拼出来时,這些内鏈對蜘蛛等于不存在。
- 骨架屏:首屏先给占位块,正文後到,抓取时机不巧就抓到空白。
- 連結寫成点击事件:没有 href,就没有可跟踪的地址,脚本再漂亮也没用。
- 篩選參數拼接:脚本生成的大量參數連結容易被批量造出,反而稀释了真正有價值的頁面。
可以落地的調整方向
- 關键内容做服務端渲染或预渲染,至少保證标题、正文、主要導航出現在原始 HTML 里。
- 分頁和栏目列表给出真實的可点击連結,让每一頁都有固定地址。
- “加载更多”保留一個對應的静態分頁作為兜底入口。
- 不要指望 noscript 兜底,它更像是给用戶的提示,而不是给蜘蛛的正式内容。
- 用站点地图补充 URL 發現,但別把地图当成渲染問题的解药。
- 上线新模板後重跑一次源碼检查,模板調整往往會把渲染方式一起改掉。
做完這些,也只是减少了障碍
渲染調整能解决的是“蜘蛛能不能看到”,不解决“看到了會不會收、會不會给排名”。内容质量、结构清晰度、站点整体可信度仍然是前提。把這一步当成基础维護就好,不必指望某個改動带来立竿见影的變化。
一個简單的判断标准:關掉 JavaScript,你的頁面還能不能讀,還能不能点着連結走两步。能,才算合格。