蜘蛛池把 URL 投出去之后,蜘蛛能不能顺着通路走进目标页面,除了线路本身,还取决于目标页面自己给出的指令。canonical、noindex、robots meta 这些写在 HTML head 里的标签,看起来是细枝末节,但它们直接决定蜘蛛进来之后是继续抓、放弃抓,还是把注意力转移到别处。不少投放看起来“没反应”,问题其实出在这一层。
页面级指令为什么会干扰投放
蜘蛛池的作用是制造入口、增加 URL 被发现的概率。但发现只是第一步,蜘蛛真正抓取页面时,还会读取页面自身给出的信号。如果这些信号和投放意图相反,就会出现一种尴尬状态:日志里明明有蜘蛛来过,流量和状态却都停在原地。
三类常见的指令冲突
canonical 指向了别的地址
canonical 的作用是告诉搜索引擎“这个页面的正式版本在哪”。如果目标页面的 canonical 指向了另一个域名、另一个栏目,甚至一个打不开的地址,蜘蛛就会认为当前 URL 不是需要独立对待的版本,投放出来的入口价值被稀释。反过来,如果希望这个 URL 被当作独立落地页看待,canonical 应当指向自身。
批量建站时最容易出问题的是模板:一套模板被复制到多个域名上,canonical 却仍然是同一个写死的地址。上架前逐个核对不现实,但至少要抽查几种模板,确认 canonical 的取值逻辑跟实际部署一致。
noindex 没有清掉
测试阶段为了避免页面提前被公开,很多人会加 noindex,或者通过响应头下发 x-robots-tag。上线时忘了移除,就会出现“蜘蛛照常来抓,页面却不进入索引”的情况。此时监控数据里抓取量是正常的,很容易被误判为通路没问题,从而把排查方向带偏。
这类问题的麻烦之处在于:它不会报错,也不会让服务器返回异常状态码,页面就是普通的 200。
robots meta 与 robots.txt 规则打架
常见的误解是:robots.txt 里禁止抓取,可以用页面上的 noindex 来兜底。实际上,robots.txt 一旦禁止抓取,蜘蛛通常不会去读取页面内容,自然也就看不到 meta 指令,结果是 URL 有可能仍以其他方式被收录,页面却完全没有可控信号。
另一种反向情况是 robots.txt 放行、页面 meta 却写了 noindex,蜘蛛白跑一趟。两种规则应当分工明确:robots.txt 管“能不能抓”,meta 与响应头管“抓了之后怎么处理”,不要让它们互相代替。
投放前的自查顺序
- 看响应状态:目标 URL 是否稳定返回 200,是否有多跳 301 链。
- 看响应头:是否下发 x-robots-tag、canonical 之类的 HTTP 级指令,优先级通常高于 HTML 内的同名标签。
- 看 head 内容:meta robots、canonical、meta refresh 的具体取值。
- 看跳转链:JS 跳转、meta refresh 与 301 混用时,链条越长,中途被放弃的概率越高。
- 看模板批量情况:抽样检查不同模板生成的页面,确认没有写死的指令残留。
一点使用建议
- 把页面级指令纳入上架检查项,和域名解析、证书一样当成基础配置。
- 保留一份指令变更记录,改过 canonical 或移除过 noindex 的批次单独标注。
- 批量扫描比逐页人工看更可靠,尤其是有多套模板并行的时候。
- 发现抓取正常但毫无沉淀时,先怀疑指令层,再怀疑通路层。
蜘蛛池解决的是“让 URL 被看见”,页面指令解决的是“看见之后怎么处理”。这两件事分属不同环节,谁都不能替谁兜底。