網站收錄

站点地图寫了十萬條 URL,為什么收錄的只是一小部分

站点地图常被当成收錄開關,但它實际只作用在 URL 發現這一步。本文解释 sitemap 數量和收錄數量為什么對不上,逐項检查文件訪問、分片、lastmod 與無效地址等常见寫法問题,並给出一套從返回碼、内鏈入口到服務器日誌比對的排查顺序,帮你判断問题卡在抓取還是頁面本身。

網站收錄

站点地图寫了十萬條 URL,為什么收錄的只是一小部分

很多站点把 sitemap 当成“提交即收錄”的開關,于是出現一種典型落差:文件里列了十萬條 URL,搜尋後台顯示被發現的有一大半,真正進了索引的却只有几千條。這個落差不一定是 sitemap 寫错了,更常见的原因是它的作用被高估了。站点地图只解决“告诉蜘蛛這里有個地址”,後面能不能被抓、抓了之後要不要留,是另外几道關。

站点地图解决的是發現問题,不是收錄問题

一個 URL 從存在到出現在搜尋结果里,大致要经過發現、抓取、索引三步。sitemap 只在前一步起作用,而且不是唯一的發現渠道——内鏈、外鏈、歷史抓取记錄、搜尋後台的提交入口都能起到類似作用。因此 sitemap 里的 URL 數量,和最终收錄數量之間没有固定的比例關系。

反過来也一样:没寫進 sitemap 的頁面,只要内鏈结构正常,照样可能被抓取和收錄。把 sitemap 当作收錄數量的控制手段,方向從一開始就偏了。

检查文件本身有没有問题

能否正常訪問

先確認 sitemap 的地址返回 200,不是 404,中間没有多余的跳轉,也没有被 robots.txt 拦住。用搜尋後台的站点地图报告提交一次,看系統能不能讀到里面的條目數;如果讀不到,多半是格式或訪問层面的問题,而不是内容质量的問题。

分片與索引文件

單文件有 5 萬條 URL 和 50MB 两個上限。超過之後要么压缩成 .gz,要么拆成多個分片,並用一個索引文件把它們串起来。索引文件里只能放分片地址,不能再混頁面 URL,這一点寫错會直接導致後半部分被忽略。

lastmod 不要随手寫

有些程序把 lastmod 统一设為目前時間,每次生成都刷新一遍。這種做法短期看似在提醒蜘蛛来抓,長期會让時間戳失去參考價值,蜘蛛逐渐不再優先處理。修改時間應当和頁面實际内容的變動對應。

別把不该出現的 URL 放進去

重定向地址、返回 404 的舊地址、被 noindex 标记的頁面、带一堆跟踪參數的連結,都不适合出現在 sitemap 里。它們會稀释抓取配額,也會让後台的“已發現”數字虚高,掩盖真正的問题。

收錄數量偏少时的排查顺序

  1. 確認 sitemap 只包含規范化後的最终地址,没有重定向和參數版本。
  2. 抽样十几個未收錄的 URL,逐個检查返回碼、meta robots、canonical 指向是否正常。
  3. 看這些頁面在站内有没有可点的入口。孤岛頁面即使被 sitemap 列出,也可能長期排不上抓取。
  4. 核對頁面内容是否與其他地址高度重复,或者正文本身太少。
  5. 對比服務器日誌,確認蜘蛛到底有没有来過這些地址。来過却没收錄,問题在頁面;压根没来,問题在抓取優先級。

用两個資料源交叉看

站点地图报告里的“已發現”和日誌里的實际抓取量,是两個不同的口径。前者只說明文件被讀到了,後者才反映蜘蛛真的訪問過。把這两個數字和索引量放在一起比對,基本能判断卡在哪一步:讀到了却没抓,是抓取調度的問题;抓了却没收錄,要回到頁面本身去找原因。

把 sitemap 当成一份“待確認清單”而不是“應收錄清單”,心態會稳很多。它的價值在于让站点的重要頁面不被漏掉,而不是保證每一個地址都進索引。

最後回到维護习惯

規模較大的站点,建议让 sitemap 由程序按栏目或時間自動分片生成,定期清理失效地址,並且只在頁面真正上线之後才加入。配合清晰的内鏈结构和稳定的服務器响應,站点地图才能發挥它那一部分作用——剩下的,仍然要交给頁面本身。