同一個頁面,用戶在浏览器里看到的样子,和搜尋蜘蛛第一眼拿到的内容,可能並不完全一致。差別通常不来自内容本身,而来自前端實現方式。理解這一点,很多“頁面明明有内容却收不進去”的問题會好排查得多。
蜘蛛先拿到的是响應,不一定是最终画面
搜尋蜘蛛訪問一個 URL 时,第一步通常是請求服務器,拿到最初的 HTML 响應。這個响應里有什么,它就先按什么理解。之後,搜尋引擎可能再安排一次渲染,把 JavaScript 执行完,得到接近用戶看到的頁面。
關键在于:渲染是額外成本。它可能發生,也可能被推迟,甚至在某些情况下不触發。所以,如果頁面的核心内容完全依赖 JS 在执行後插入,就等于把内容放在了第二道门後面,能不能過這道门不由站点决定。
几類常见實現,各自的風險点
懒加载
图片和長列表懒加载,本意是提升性能。但触發條件如果绑在滚動事件上,蜘蛛很可能不會滚動。结果就是占位图和一個空容器。文本内容如果也靠滚動才插入,風險更大。相對稳妥的做法是首屏内容直出,懒加载只用在下半部分,同时在源碼里保留可抓取的連結和文本。
無限滚動
無限滚動對用戶友好,對收錄不友好,因為它没有稳定的分頁地址。每滚一段,URL 不變,内容却換了。蜘蛛没有位置感,也就無法為這些内容分配獨立地址。常见的补救是保留可点击的分頁入口,或给滚動加载的部分單獨生成可訪問的 URL。
選項卡與折叠面板
選項卡里的内容,如果是通過 JS 從外部接口動態請求的,可能根本不在初始 HTML 里。相比之下,用 CSS 控制顯示隐藏、内容仍寫在 HTML 中的做法,要安全得多。折叠面板同理:折叠可以,但内容最好在源碼里就存在。
点击、悬停才出現的内容
這類交互常用于展示更多信息、規格參數或评论。對用戶是省空間,對蜘蛛則可能是“不存在”。如果這段内容值得參與收錄,就不该只藏在交互之後。
自查可以按這几步来
- 禁用 JavaScript 打開頁面,看還剩下多少内容,連結還能不能点。
- 用浏览器的“查看網頁源代碼”,而不是“检查元素”,確認核心文本是否出現在源碼里。
- 在搜尋控制台用網址检查,對比“已抓取的 HTML”和“已渲染的 HTML”,看差异有多大。
- 翻服務器日誌,確認蜘蛛是否真的請求了那些 JS 文件和接口资源。
什么时候需要動结构
並不是所有 JS 渲染都必须改。判断标准可以简化成两條:這段内容是不是頁面要參與收錄的主体;這個 URL 是不是你希望出現在搜尋结果里的地址。
如果两條都是肯定的,比較稳的方向是服務端渲染或预渲染,让關键内容出現在初始响應里。如果只是一些次要交互,或者頁面本来就不打算進索引,那就不必大動干戈,改動的收益也有限。
別忽略連結本身
還有一個常被忽略的点:連結。如果站点導航、列表頁的連結也是 JS 渲染出来的,蜘蛛可能连 URL 都發現不了,後面的抓取和收錄自然無從谈起。相比之下,普通的 a 标簽連結仍是最可靠的發現渠道,尤其是那些指向詳情頁、分類頁的入口。
先把“蜘蛛能不能看到”和“用戶能不能看到”当成两件事分別检查,再决定要不要改前端。相当一部分收錄問题,卡在這一步之前,而不是之後。