Sitemap 常被当成把 URL 交给蜘蛛的快捷方式,但提交之後没有抓取,原因往往不在提交這個動作本身。蜘蛛是否来、什么时候来,取决于文件能不能讀、里面的 URL 值不值得抓,以及站内路径和服務器狀態是否配合。下面是一份可以逐項核對的清單。
先確認 Sitemap 文件能被正常讀取
第一步不是看蜘蛛,而是看 Sitemap 本身。用一個未登入的浏览器或無缓存环境訪問 Sitemap 地址,確認返回 200,而不是 301 鏈太長、403 或 5xx。Content-Type 通常是 application/xml 或 text/xml,如果被服務器返回成 text/html,蜘蛛可能會把它当成普通頁面處理。
XML 格式错誤也會導致整份文件被跳過。检查标簽是否閉合、URL 是否做了轉义、是否包含非法字符。如果 Sitemap 很大,還要確認分片文件都能單獨訪問,並且索引文件里的地址指向正确。
看 Sitemap 里的 URL 是否值得進入抓取队列
蜘蛛讀完 Sitemap 後,並不會立刻抓取全部 URL。它會结合頁面狀態、重复度和站内重要性做篩選。以下几種情况容易让 URL 停在队列外:
- URL 返回 404、410 或软 404,蜘蛛抓一次後就會降低信任。
- 頁面被 robots.txt 屏蔽,Sitemap 里却仍然保留。
- 頁面 canonical 指向別的 URL,或本身是重复内容。
- URL 带大量參數,且參數组合没有收敛,蜘蛛會認為可抓版本太多。
- 頁面需要登入或必须提交表單才能看到内容。
把這些 URL 留在 Sitemap 里,不會增加抓取,反而會让蜘蛛對整份清單的准确性打折扣。定期清理無效地址,比堆更多 URL 更有用。
lastmod 要真實,不要每篇都改
很多站点會在每次生成 Sitemap 时把全部 URL 的 lastmod 更新為目前時間。短期看像是“告诉蜘蛛我更新了”,長期看會让 lastmod 失去參考價值。蜘蛛更關注的是内容是否真的發生了變化。如果只是模板或邊栏改動,没有必要改 lastmod。
相對稳妥的做法是:只有正文、标题、關键信息确實更新时才調整對應 URL 的 lastmod;批量更新时也尽量分批,不要一天内全站同时變動。
從訪問日誌核對蜘蛛是否真的讀取過 Sitemap
不要凭感觉判断。到服務器訪問日誌里搜尋 Sitemap 文件的請求记錄,看蜘蛛有没有来、返回狀態是多少、频率如何。如果 Sitemap 被频繁讀取,但里面的 URL 没有後續抓取,問题更可能在 URL 篩選或站内路径上。
日誌里能看到“来過”,但看不到“為什么没繼續抓”。所以要把 Sitemap 讀取记錄和具体 URL 的抓取记錄分開看。
内鏈與抓取入口是否配合
Sitemap 提供的是 URL 清單,不是抓取路径。蜘蛛仍然會從首頁、栏目頁、列表頁、相關推荐等位置發現連結。如果一個 URL 只出現在 Sitemap 里,站内没有任何入口指向它,蜘蛛對它的重要性判断會偏低。重要頁面至少要有稳定的内鏈入口,並且連結是普通的 a href,而不是依赖点击事件或 JavaScript 後才生成。
服務器响應與抓取节奏
如果服務器响應時間经常超過几秒,或者間歇性返回 5xx,蜘蛛會主動降低抓取频率。這種情况下,Sitemap 寫得再完整,抓取速度也會被压制。先解决稳定性和响應速度,再谈 Sitemap 的覆盖量。
一個可执行的排查顺序
- 直接訪問 Sitemap,確認狀態碼、類型和 XML 格式。
- 抽查若干 URL,確認返回 200、可索引、不是重复頁面。
- 检查 lastmod 是否真實,避免全站同时變動。
- 在日誌中確認蜘蛛讀取 Sitemap 的记錄和狀態。
- 检查這些 URL 是否有站内入口,連結是否可被直接抓取。
- 观察服務器响應時間和错誤率,排除稳定性問题。
- 保持一段時間不要反复改 Sitemap,给蜘蛛一個稳定的观察窗口。
Sitemap 更像是给蜘蛛的一份线索清單,不是收錄保證。把文件本身、URL 质量、更新信号、日誌核對和内鏈路径都检查一遍,比反复重新提交更容易找到真正卡住的位置。