常见问题

蜘蛛池入口页用 meta refresh 跳转:搜索蜘蛛会跟过去吗,里面的链接还抓得到吗

不少蜘蛛池入口页不做 301,也不写可点击链接,只用一行 meta refresh 跳转。本文说明搜索蜘蛛对 delay=0 和延迟跳转的不同处理,为什么它不能替代 a href,以及如何用日志判断蜘蛛是否真的跟过去了。

常见问题

蜘蛛池入口页用 meta refresh 跳转:搜索蜘蛛会跟过去吗,里面的链接还抓得到吗

很多蜘蛛池入口页为了“省事”,不做服务端跳转,也不写可点击的链接,只在 head 里放一行 meta refresh,把访客和爬虫一起送到下一个页面。问题在于:搜索蜘蛛对 meta refresh 的处理并不是“看到就跟着抓”,它的地位介于重定向和普通页面内容之间,可靠性明显低于一个正常的 a href 链接。

先给结论

主流搜索引擎基本都能识别 meta refresh。delay=0 的立即跳转,通常会被当作类似 301/302 的重定向来对待,蜘蛛有较大概率去请求目标地址;delay 大于 0 的延迟跳转,更像页面里的一句提示,是否跟随、隔多久跟随,各家实现并不一致,不确定性要大得多。

但“能识别”不等于“会当成链接来对待”。meta refresh 不进入页面的链接关系分析,也没有锚文本可用,所以它顶多算一条补充通道,不适合作为入口页里唯一的 URL 发现方式。

两种写法的实际差别

delay=0,立即跳转

这种情况下,入口页在蜘蛛眼里常常只是一个中转地址。你会在日志里看到蜘蛛先抓入口页,紧接着抓目标地址。如果入口页本身返回 200 但内容很薄,它被反复抓取的意义不大,真正被识别和评估的还是目标地址。

delay=3、delay=5 等延迟跳转

延迟写法在浏览器里是“停留几秒再跳”,对爬虫来说更像一段普通 HTML。有的引擎会跟随,有的不会,也有的会跟随但优先级很低。入口页如果只靠这一种方式,URL 被发现的速度和概率都会打折扣。

为什么它不如普通链接可靠

  • 不参与链接关系计算:目标地址拿不到锚文本,也进不了正常的链接图。
  • 行为不统一:不同搜索引擎、不同抓取版本的处理可能存在差异。
  • 容易被跳过:入口页内容单薄或长期不更新时,meta refresh 往往连带被忽略。
  • 排查困难:日志里只看见入口页被抓,很难分清是没跟过去,还是跟过去了但没被收录。
  • 多层套用更糟:A 页 refresh 到 B 页,B 页再 refresh 到 C 页,链路越深越容易断。

想让某个 URL 被稳定发现,建议这样放

  1. 正文里写完整的绝对地址,用 a 标签包起来,并保证入口页返回 200、robots 允许抓取。
  2. 单个入口页的链接数量控制在合理范围,不要为了堆量把正文塞满。
  3. 把 sitemap 当作第二条通道:入口页负责链接,sitemap 负责清单,两者互相印证。
  4. 确实要更换入口地址时,用服务端 301 处理,而不是靠 meta refresh 打补丁。
  5. 如果一定要用 meta refresh,写在 head 里,目标用绝对 URL,delay 设为 0,同一页照样保留可点击链接。

怎么验证搜索蜘蛛到底有没有跟过去

最直接的办法是看服务器访问日志:目标地址那条记录有没有出现、UA 是什么、时间点是不是紧跟入口页之后。也可以给入口页和目标页设置区分明显的路径,方便在日志里过滤统计。

如果连续观察一段时间,日志里只有入口页的抓取记录,目标地址一次都没出现,基本可以判断蜘蛛没有跟随这次跳转。这时不要反复调整 delay 的数值,先把正常的 a href 链接补上。

几个容易踩的坑

  • 把 meta refresh 写在 body 里:部分解析器可能忽略,尽量放在 head。
  • 目标写成相对路径:层级一深就容易指错,统一用绝对地址。
  • 入口页同时设了 noindex:抓取和跟进是两回事,但页面本身的价值会被进一步削弱。
  • 只看浏览器表现:浏览器能跳,不代表蜘蛛会跟,判断依据要回到日志。
meta refresh 可以当辅助,不能当主路。入口页真正的价值,是给蜘蛛一条清晰、可点击、可验证的路径,而不是让它去猜。