有些蜘蛛池入口頁不再把目标 URL 寫成可点击的 a 标簽連結,而是只在頁面里放一個指向 sitemap.xml 的地址,甚至入口頁上什么都不放,只靠 robots.txt 声明 Sitemap。這種做法的實际效果,取决于搜尋蜘蛛是否知道這份 sitemap 的存在,以及這份文件本身是否符合解析要求。
sitemap 属于声明式的發現渠道
HTML 連結和 sitemap 是两套不同的机制。前者靠搜尋蜘蛛顺着頁面爬行,從一個 URL 走到下一個 URL;後者是站点主動列出「我有哪些 URL」的清單,等搜尋引擎定期或按需来讀取。
入口頁只放 sitemap 地址、不放可点击連結,等于把發現路径從「顺着連結走」換成了「等搜尋引擎来讀清單」。所以第一個要問的問题是:搜尋引擎有没有拿到這份 sitemap 的地址?如果地址根本没被讀到,頁面里寫不寫連結就没有区別。
頁面里的 sitemap 連結,和 robots.txt 的 Sitemap 指令不是一回事
常见有三種寫法,效果差別不小:
- 入口頁放一個 a 标簽指向 sitemap.xml:搜尋蜘蛛需要先抓到入口頁,再顺着這個連結去抓 XML 文件。多绕了一跳,抓取频率低的时候會更慢。
- 在 robots.txt 中寫 Sitemap: 完整地址:這是被普遍支持的方式。搜尋引擎抓取 robots.txt 时會讀到该地址,並在一段時間内安排抓取。
- 在搜尋资源平台後台手動提交:适合新增内容或临时补漏,一般作為补充手段,不代表永久通路。
如果入口頁只寫了一個 XML 文件地址,既没有可点击連結,robots.txt 里也没有声明,搜尋引擎通常不會凭空知道這份文件存在。
sitemap 被真正處理,還要過几道门槛
地址被讀到只是第一步,解析环节還有限制:
- 同域限制:一個 sitemap 文件里的 URL,通常需要與 sitemap 所在域名一致,跨域 URL 往往被忽略。
- 可正常訪問:返回 200,Content-Type 為 XML 或文本類,且不要被 WAF、登入校驗、UA 判断拦住。
- 格式合法:标簽閉合、编碼正确,<loc> 里是绝對 URL 並對特殊字符做好轉义。
- 不被 robots 屏蔽:sitemap 文件本身被 robots.txt 的 Disallow 挡住,會影响讀取。
- 規模與质量:單個文件有 URL 數量和体积上限,超出要拆成多個並用索引文件串联;塞满大量重复或低價值 URL,會让這份清單被認真處理的意愿下降。
把入口頁当 sitemap 跳板时的常见誤区
- 入口頁只有 XML 地址,没有可爬的 HTML 連結,發現节奏完全依赖搜尋引擎主動讀取。
- 多個入口頁指向内容几乎相同的多份 sitemap,地址數量堆得很高,但新增内容並不清晰。
- sitemap 里的 URL 與入口頁實际暴露的 URL 不一致,出現两套口径,後續很难判断問题出在哪。
- 只改内容不改 lastmod,或者每次都把 lastmod 刷成目前時間,這個字段就失去了參考價值。
- 把 sitemap 当成收錄開關,認為寫完就一定會被抓取。它只解决發現环节的一部分,不决定抓取和收錄结果。
更稳的组合方式
如果目的是让目标 URL 尽早進入發現队列,比較稳妥的做法是几種渠道並行:入口頁保留數量受控、结构清晰的 HTML 連結;robots.txt 里声明一份格式正确的 sitemap;新增内容再配合後台提交。三者不冲突,HTML 連結负责顺着爬,sitemap 负责兜底和补充。
sitemap 的作用是「告诉」搜尋引擎有哪些 URL,不是「保證」它一定抓取。它影响發現的可能性,不决定最终结果。
排查时,可以分別看 sitemap 文件的抓取记錄和入口頁的抓取记錄:sitemap 從没被抓過,問题在声明和地址;sitemap 被抓了但目标 URL 没動静,問题則在清單内容、格式或後續排队环节。