不少人把 sitemap 当成收錄開關:提交之後,就等着頁面出現在索引里。實际上,sitemap 只负责一件事——把 URL 告诉搜尋引擎,让它更容易被發現。它既不保證被抓取,更不保證被索引。
如果提交之後長時間没有動静,問题往往不在“提交”這個動作,而在這份 URL 清單本身,或者被提交的頁面暂时還不具备進入索引的條件。
先分清:sitemap 解决的是“發現”,不是“收錄”
爬虫處理一條 URL 大致會经過三個阶段:發現、抓取、索引。sitemap 只作用在第一個阶段。它让 URL 進入待抓取队列,但抓不抓、什么时候抓、抓完之後收不收,都由別的因素决定。
所以看到“已發現,尚未编入索引”這類狀態时,說明 sitemap 已经起了作用,URL 也确實被看到了。此时再怎么改 sitemap、再提交几次,都不會让頁面往前走一步。
常见無效提交的几種形態
1. 清單里混進了不该提交的 URL
- 返回 404、410 的已刪除頁面
- 發生 301、302 跳轉的舊地址,而不是跳轉後的最终地址
- 被 robots.txt 屏蔽的路径
- 設定了 noindex 的頁面
- canonical 指向其他 URL 的重复版本
- 同一内容带上跟踪參數、會话參數後的多個變体
這些 URL 提交上去通常不會报错,但也不會有结果,還會稀释整份清單的信噪比,让爬虫把配額花在無效地址上。
2. 格式與規模上的细节
- 單個 sitemap 文件建议不超過 5 萬條 URL、未压缩不超過 50MB
- 站点較大时用 sitemap index 拆成多個子文件,而不是硬塞進一個
- URL 要寫完整的绝對地址,包含协议與域名
- gzip 压缩的文件需要保留 .gz 後缀,纯文本則一行一條
這些属于基础要求,出错时往往表現為“文件讀取失敗”或“URL 數量異常”,比較容易在报告里直接看到。
3. 内容层面:全量不等于有效
把站点所有 URL 一並塞進去,包括分頁、篩選、站内搜尋结果頁、空标簽頁,是另一個常见問题。這些頁面本身可索引價值有限,大量提交只會让爬虫在低價值地址之間来回消耗预算,反而拖慢真正重要頁面的抓取节奏。清單不是越全越好,而是越准越好。
4. 放置與声明的位置
sitemap 需要在 robots.txt 中声明,或在搜尋平台的相應入口提交。子域名通常要各自提交,不要把多個子域的内容混在一個文件里,也不要把其他域名的 URL 寫進来。位置错了,爬虫可能根本讀不到。
一份自查顺序
- 從 sitemap 里随机抽 20 條 URL,逐條手動打開,看狀態碼、是否有 noindex、canonical 指向哪個地址。
- 检查 robots.txt,確認没有誤屏蔽這些路径。
- 確認清單里的地址與站内實际可抓取的規范版本一致,跳轉地址換成最终地址。
- 查看搜尋平台後台的 sitemap 报告,關注是否讀取成功、發現了多少條、其中多少處于“已發現,尚未编入索引”。
- 翻服務器日誌,確認爬虫是否真的抓取過 sitemap 文件本身,以及抓取频率是否正常。
- 對長期不收錄的頁面,回到内容本身判断:是否有獨立價值、是否與站内其他頁面高度重复。
提交之後该關注什么信号
第一,日誌里有没有對 sitemap 文件的抓取记錄;第二,报告里對 URL 的讀取與發現數量是否對得上;第三,這些 URL 後續有没有被抓取、有没有進入索引。
如果狀態長期停在“已抓取,尚未编入索引”,說明抓取這一环已经通了,問题出在頁面质量或重复判断上。此时繼續調整 sitemap 意义不大,重点應放在内容差异化和頁面本身是否值得被收錄。
sitemap 是告知,不是請求收錄。它能加快 URL 被發現的速度,但替代不了頁面自身的可索引條件。