搜尋抓取

Sitemap 與内鏈说法不一致时,蜘蛛會听谁的

Sitemap 说這些 URL 重要,内鏈却一個都不指向;内鏈天天在走的頁面,Sitemap 里又找不到。两套信号打架时,蜘蛛實际按連結走,站点地图更接近一份申报清單。本文拆解孤儿 URL、未申报頁面、寫法分叉這三類常见不一致,以及用日誌和覆盖率對照来排查的實操顺序。

搜尋抓取

Sitemap 與内鏈说法不一致时,蜘蛛會听谁的

做站点运营时经常遇到一種別扭的情况:Sitemap 里老老實實列了几百個 URL,但内鏈几乎没有指向它們;反過来,導航和正文里天天在点的頁面,Sitemap 文件翻遍了也找不到。两種信号不一致时,蜘蛛會如何處理?先把结论放在前面:抓取靠連結,申报靠 Sitemap。Sitemap 是告诉搜尋引擎“這些地址存在、大概什么时候變過”,而蜘蛛真正走通一條路径,靠的是從一個已有頁面点進去的連結。

Sitemap 和内鏈,本来就不是一回事

Sitemap 解决的是“發現”問题:一個完全孤立、没有任何内鏈指向的 URL,如果没有 Sitemap,蜘蛛几乎没有机會知道它存在。内鏈解决的是“路径”問题:即使 Sitemap 列得很全,如果頁面之間不互鏈,蜘蛛抓到之後也走不深,後續的重新抓取更依赖它自己排出的優先級。

两者的定位不同,所以“不一致”本身不一定是错誤。真正需要關注的是,当两份信息明顯冲突时,蜘蛛會表現出什么行為。

三種常见的不一致,以及蜘蛛的實际反應

一、Sitemap 里有,内鏈里没有

這類 URL 属于“被申报的孤儿”。蜘蛛通常還是會来抓一次,但抓完之後,如果没有別的頁面連結指向它,它就很难再被排進下一轮。更新频率低的頁面,可能几個月都不再被訪問。

如果這類頁面本身重要,正确做法不是反复重提交 Sitemap,而是在相關的内容頁里补一條自然的上下文連結。

二、内鏈里有,Sitemap 里没有

只要頁面能被正常爬取的連結点到、又没被 robots.txt 挡住,蜘蛛照样會抓,也會顺着它往下走。Sitemap 缺了這些 URL,主要影响两個地方:一是新頁面首次被發現的時間可能變長;二是你失去了一個主動声明“這頁更新過”的渠道。

這類不一致通常無害,但數量一多,說明站点地图的维護流程已经和内容更新脱节了。

三、两邊都寫了,但寫法不同

這是最容易被忽略、也最容易造成浪費的一種。導航里寫的是带 www 的版本,Sitemap 里寫的是不带 www;内鏈用大寫路径,Sitemap 用小寫;一邊带尾斜杠一邊不带。寫法分叉之後,蜘蛛可能把它們当成不同的入口,反复請求、反复跳轉,日誌里看起来抓取量很大,實际有效頁面没几個。

怎么核對:日誌比猜测可靠

想知道蜘蛛到底听了谁,最直接的办法是看服務器日誌里的抓取记錄。可以重点看三類 URL:

  • Sitemap 里有、日誌里長期零抓取的,多半是缺内鏈通路;
  • 日誌里抓得很勤、但不在 Sitemap 里的,說明内鏈路径是通的,只是没被申报;
  • 同一内容出現多種寫法、且都在被反复抓的,属于归一化問题,先统一入口寫法。

日誌里的 User-Agent、狀態碼、訪問時間這几列,基本能還原出一條路径是断在哪一步。

一個简單的自查顺序

  1. 導出 Sitemap 里的全部 URL,和日誌中實际被訪問的 URL 做一次差集。
  2. 對“只在 Sitemap、從未被抓”的 URL,回到頁面上找它有没有内鏈入口。
  3. 對“只在日誌、不在 Sitemap”的 URL,判断是值得保留的頁面,還是參數頁、重复頁。
  4. 统一 URL 寫法:协议、域名、大小寫、尾斜杠、預設文档,只保留一種。
  5. 把確認要長期维護的 URL 补進 Sitemap,同时补上至少一條内鏈。

別把 Sitemap 当成抓取開關

Sitemap 的作用更像一份提交给搜尋引擎的清單,它不能替頁面建立通路,也不能保證某個 URL 一定被抓。反過来,内鏈通路建立得好,即使站点地图暂时不完整,蜘蛛也不會找不到内容。

比較稳妥的狀態是:Sitemap 覆盖你希望長期维護的全部 URL,内鏈让這些 URL 至少有一條路径可達,两者寫法一致。做到這三点,就已经避開了大部分“申报了却没人来”的問题。

把 Sitemap 当作申报清單,把内鏈当作通路,两者對齐之後再谈其他優化,顺序會更顺。