经常有人問:入口頁已经做了 sitemap,也用了主動推送,為什么目标 URL 還是迟迟没被抓?要回答這個問题,先要分清两件事——“入口頁自己被發現”和“搜尋蜘蛛從入口頁跟到目标 URL”,這是两個獨立的环节,前者顺了不代表後者就顺。
sitemap 解决的是入口頁本身被發現的問题
sitemap 的作用是把 URL 清單交给搜尋引擎,告诉它“這些頁面存在,可以来抓”。它主要影响的是清單里那些頁面自己的抓取,而不是清單里頁面外鏈出去的地址。
換句话说,你把入口頁寫進 sitemap,能帮的是入口頁更快被派蜘蛛来抓;至于蜘蛛抓完入口頁之後會不會顺手去抓目标 URL,sitemap 管不到。它不會因為你在清單里寫了 A 頁,就顺带把 A 頁里鏈出去的 B 頁也加快。
- 清單里應该只放你能控制、且确實希望被抓的頁面,通常是入口頁本身;
- 不要把別人的目标 URL 塞進自己的 sitemap,這類條目一般不會被采用;
- sitemap 里的 URL 必须返回正常狀態碼,301、404 的條目會浪費抓取机會。
主動推送能做什么、不能做什么
主動推送(各家的普通收錄、IndexNow 之類)是把 URL 主動告诉搜尋引擎,省掉“等它自己發現”的等待。它的價值在于加快入口頁的首次抓取,額度通常有限。
- 能做的:让入口頁更快進入抓取队列,尤其是新上线的入口頁;
- 不能做的:替蜘蛛决定要不要跟進頁面里的外鏈,也不能让目标 URL 越過自己的可抓取條件;
- 容易踩的坑:把推送額度全用在目标 URL 上,但目标 URL 不归你控制、也没有驗證關系,推送多半無效。
真正决定搜尋蜘蛛能否跟到目标 URL 的,是這几件事
- 入口頁是否可抓取:robots.txt、頁面 meta、X-Robots-Tag、WAF 或 CDN 拦截,任何一层挡住,蜘蛛都到不了連結所在的頁面;
- 連結是否可解析:必须是 HTML 里的 a 标簽加 href,JS 渲染、点击事件、表單提交、纯文本都不是稳定的發現方式;
- 連結是否可跟進:nofollow、HTTP 头里的 nofollow、跳轉鏈路過長,都會削弱甚至切断跟進;
- 入口頁的抓取频率:歷史表現、更新频率、服務器响應速度會影响它多久被回訪一次;
- 目标 URL 自身的狀態:返回 404、503、需要登入、限流,蜘蛛跟過去也會空手而归,下次可能就不来了。
一套可执行的排查顺序
- 先在搜尋引擎里查入口頁有没有被抓、有没有被索引,確認第一环通了;
- 抓一份入口頁的 HTML 源碼,確認目标 URL 以 a href 的完整形式出現在源碼里,而不是渲染後才出現;
- 用抓取工具模拟蜘蛛訪問入口頁,看返回碼、看是否被拦截、看連結能否被解析出来;
- 再看目标 URL 的返回碼和响應速度,確認蜘蛛跟過去时能拿到正常内容;
- 最後去查服務器日誌里的蜘蛛訪問记錄,看有没有對目标 URL 的請求,這一步最直接。
几個常见誤区
以為提交了 sitemap 或者推送了 URL,就等于完成了全部工作——實际上那只是把入口頁递到门口,進门之後能不能走到目标 URL,還是取决于頁面本身。
- 誤区一:sitemap 寫好就不用管入口頁质量了。清單只负责“通知”,不负责“说服”蜘蛛跟進。
- 誤区二:推送額度用满就一定會抓。重复推同一個 URL、推不归你控制的地址,效果都會打折。
- 誤区三:入口頁被抓過一次就不用维護。長期不更新、响應變慢,回訪間隔會逐渐拉長。
把 sitemap 和主動推送当成“加速入口頁被發現”的工具,而不是“让目标 URL 被跟進”的手段,思路會清楚很多。真正要让目标 URL 被持續發現,重点還是入口頁可抓取、連結可解析、目标 URL 可正常响應這三件事同时成立。