做站点运营时,我們习惯在浏览器里看頁面:排版正常、图文齐全、点得動。但搜尋蜘蛛拿到的是另一份東西,通常是原始 HTML,未必执行脚本。如果關键内容都靠 JS 在浏览器里生成,蜘蛛看到的可能就是一張空壳。這不是收錄與否的問题,而是它连内容都没讀到,自然也無從判断這個地址值不值得留。
先搞清楚:蜘蛛到底拿到了什么
判断方法很直接:禁用 JavaScript,或者用抓取工具查看原始响應源碼,看正文、内鏈、主要文字是否還在。
- 源碼里能看到标题、正文、内鏈,基本没問题。
- 源碼里只有 script 和空的 div,說明内容靠前端渲染,需要進一步確認。
- 源碼里有内容但與前端顯示不一致,要留意首屏與兜底内容的關系。
三種常见渲染方式
服務端渲染
HTML 在服務器端拼好再返回,蜘蛛拿到的和用戶看到的差別不大,最省心。代價是服務器压力更高,對缓存和响應時間更敏感。运营侧要留意首字节時間和缓存策略,別让渲染變慢反過来影响抓取。
客戶端渲染
頁面返回一個壳,内容由浏览器执行 JS 後拉接口填充。蜘蛛未必完整执行脚本,也未必愿意等接口返回。列表頁、詳情頁如果都用這種方式,容易出現地址能打開、内容却抓不到的情况。
混合渲染與预渲染
首屏服務端輸出,後續交互交给前端;或者對蜘蛛返回预渲染版本。這是折中方案,但要保證两條路径产出的标题、連結、正文一致,否則容易變成两個版本各说各话。
自查清單
- 關閉 JS 打開几個代表頁面,包括首頁、栏目頁和一篇内容頁,對比内容差异。
- 查看原始 HTML,確認正文首段和主要内鏈是否出現在源碼里。
- 检查分頁、篩選、加载更多:這些内容是否只存在于按钮中,而没有可抓取的地址。
- 確認重要導航和内鏈是真正的 a 标簽,而不是由脚本触發的跳轉。
- 检查渲染所依赖的接口是否被 robots.txt 或權限規則挡住,接口被禁,蜘蛛同样拿不到内容。
- 對比抓取快照與目前頁面,看是否存在長期停留在舊版本的情况。
別踩的几個坑
- 只做脚本跳轉:用 JS 代替超連結,蜘蛛不一定跟着走,URL 發現會變差。
- 懒加载没有兜底:图片和長列表靠滚動触發加载,源碼里没有地址,等于對内鏈没有贡献。
- 给蜘蛛和用戶看不同内容:一旦被识別,信任度很难恢复。
- 忽略渲染耗时:脚本体积過大、接口串行,蜘蛛可能提前放弃,頁面只被讀了一半。
运营层面怎么配合
渲染是前端和运维的事,但运营要把要求说清楚:哪些頁面必须能在源碼里讀到,哪些連結必须可点可抓。上线新栏目或改版时,把關閉 JS 看一遍加進检查流程,比事後排查省力得多。
蜘蛛看到的内容,才是你真正對外發布的版本。浏览器里的效果是给用戶的,源碼里的内容才是给抓取的。