很多人判断一個頁面有没有被收錄,习惯直接看索引报告或者搜尋 site: 的结果。但如果換個角度,先去服務器日誌里看抓取记錄,往往會遇到另一種情况:爬虫明明来過,返回碼也是 200,索引里却找不到這個地址。這时候需要先分清两件事:抓取(crawl)和收錄(index)。
抓取和收錄是两道不同的關
抓取指的是爬虫把 URL 對應的内容取回去,只說明它發現了這個地址並且能訪問。收錄則是搜尋引擎在抓取之後,對内容做解析、去重、质量判断,最後决定是否寫入索引並允许被检索。從抓取到入索引之間還有若干道判断,任何一道没過,日誌里都會留下抓取记錄,但索引里看不到结果。
第一關:抓取本身是否真的成功
日誌里的 200 不等于内容被完整取到。常见的干扰有:
- 返回 200 但正文是空壳,内容依赖 JS 渲染,而渲染阶段没有跑起来;
- 返回 200 的其實是软 404 頁面,内容與错誤頁高度相似;
- robots.txt 屏蔽了 CSS 與 JS,爬虫拿到的是残缺頁面;
- 頁面被登入墙、驗證碼或 CDN 的频控拦在门外。
這一關要確認的是:返回碼正常、正文能被取到、渲染後的内容與用戶看到的基本一致。
第二關:可索引性判断
抓取成功之後,搜尋引擎會先看這個頁面允不允许被索引。meta robots 里的 noindex、HTTP 头里的 X-Robots-Tag,以及 canonical 指向了別的地址,都會让頁面即使被抓取也不進入索引,或者索引里挂的是另一個 URL。此外,如果同一批内容存在多個近似版本,搜尋引擎通常只會挑一個作為代表,其余的以替代頁面的形式存在,在报告里往往表現為已抓取但尚未编入索引。
第三關:是否被選中
指令上允许索引,也不代表一定會被收錄。這一层更多是價值判断:頁面是否有獨立信息、主体内容占比是否够、與站内其他頁面的差异是否明顯。批量生成的列表頁、内容高度相似的地域頁,容易出現抓取正常但收錄很少的情况。
建议的排查顺序
- 用日誌或 URL 检查工具確認最近一次抓取時間、返回碼,以及抓取的是哪一個 URL 版本;
- 检查 robots.txt 是否放行该目錄,以及頁面是否带有 noindex;
- 查看 canonical 指向的是自己還是別的地址;
- 對比站内是否存在内容近似的多個版本,確認谁是首選;
- 检查正文主体是否完整,是否被導航和推荐模块淹没;
- 確認该 URL 有内鏈可達,並且出現在 sitemap 中。
按這個顺序走,可以把抓取問题和收錄問题分開,避免在一個点上反复改動。
日誌能說明什么,不能說明什么
有抓取记錄,只能說明發現和訪問發生過,不能作為收錄的證據;反過来,某段時間日誌里没有某個地址,也不代表它没進索引,可能只是已有缓存、暂时不需要重抓。判断收錄,最终還是要回到索引狀態本身,把日誌当作抓取侧的补充信息。
抓取是過程,收錄是结果。先把過程里的異常排掉,再去解释结果。
實操中比較省事的做法是:為一批重点頁面單獨建個小清單,记錄抓取時間、返回碼、canonical、是否 noindex、索引狀態這几項,定期回看。這比事後集中排查更容易定位到變化發生的节点。