同一個頁面,在浏览器里看着内容很足,搜尋引擎拿到的版本却可能只有上半截。問题常常不在整站渲染,而在几個具体的位置:折叠面板、選項卡、懒加载容器、需要点击或滚動才出現的区块。抓取和收錄是两個环节,先要能把内容拿到,再判断這段内容值不值得進索引。可见性出問题的頁面,大多卡在前一個环节。
抓取到的是 HTML,不是屏幕
搜尋引擎抓取时首先拿到的是服務器返回的 HTML,之後才可能执行 JS 补全内容。所以判断一段内容能不能被讀到,第一步是看它在初始 HTML 里有没有。
- HTML 里就有文字,且没有被刻意隐藏:一般能讀到。
- HTML 里没有,要等 JS 請求接口再插入:取决于渲染是否执行到那一步,不够稳定。
- HTML 里只有占位符,真實内容放在属性里,例如 data-src:很多时候讀不到。
懒加载:影响最大的是图片,其次才是文字
图片懒加载現在很常见,做法是 src 留空或给一張占位图,真實地址放在 data-src,等元素進入视口再替換。文字内容通常不受影响,但如果整個商品列表、文章段落都是滚動到底部才由 JS 追加的,就要留意。
- 图片:尽量让 src 或 srcset 指向真實资源,或保留 noscript 里的回退寫法。
- 列表:首屏之外的條目最好有對應的分頁 URL,而不是只有無限滚動。
- 一個粗略的评测办法:临时關掉 JS,看還剩多少正文,這個残量大致反映最低限度的可讀内容。
折叠面板和選項卡:多數能讀到,但別赌
如果折叠区域的内容本来就寫在 HTML 里,只是靠 CSS 或一段脚本控制展開,那它通常存在于 DOM 中,能被讀到。两種情况例外:一是点击後才去請求接口、把内容動態插進来的,本质就是懒加载;二是内容用图片或画布渲染的,可讀性更差。
自查方法很直接:打開查看網頁源代碼,搜一段只出現在折叠区里的文字。能搜到,說明至少進入了 HTML;搜不到,就要按懒加载的思路處理。
CSS 隐藏與视觉隐藏
display 為 none、visibility 為 hidden 的元素一般還留在 DOM 中,可能被抓取程序讀到,但不要指望它被当成正文參與判断。用隐藏文字堆關鍵詞属于老式做法,收益低、風險高。屏幕阅讀器专用的隐藏類只要用在该用的地方,没有額外問题。
登入墙、付費墙和强制彈窗
- 需要登入才能看到的正文,蜘蛛得到的是登入頁或提示语,收錄的也往往是那個版本。
- 付費墙要区分開:可公開的标题、首段和摘要尽量放在 HTML 里,剩下的再谈限制。
- 打開頁面就整屏覆盖的彈窗和插屏,會影响内容提取,能延後或减少就减少。
一份可执行的自查顺序
- 用查看源代碼,搜尋正文中的獨有關鍵詞。
- 临时關閉 JS,看頁面還剩哪些内容。
- 检查图片是否為空 src,有没有 noscript 回退。
- 確認無限滚動是否有對應的分頁地址可供抵達。
- 用搜尋平台的 URL 检查工具查看渲染後的 HTML,與源代碼對比。
- 把服務器日誌里该 URL 的抓取记錄,和索引狀態對照,看断在哪一步。
内容可见性不是玄学:先保證正文在 HTML 里,再保證它没有被遮住,最後才考虑怎么让它被索引。顺序颠倒,後面的努力容易被前面卡住。