常见问题

入口页用 meta refresh 跳转,搜索蜘蛛还会跟进目标 URL 吗?

入口页不用普通链接、而是靠 meta refresh 或 JavaScript 跳到目标 URL,是很常见的做法。本文拆开讲这两种跳转被搜索蜘蛛处理的方式、和标准 a 链接的差别,以及怎么用日志验证目标 URL 到底有没有被跟进,避免把发现路径押在一个不稳定的跳转上。

常见问题

入口页用 meta refresh 跳转,搜索蜘蛛还会跟进目标 URL 吗?

做蜘蛛池的人经常会碰到一种入口页:页面本身能正常打开,但目标 URL 并不是用标准链接写出来的,而是靠 meta refresh 或者一段 JavaScript 自动跳过去。这种页面搜索蜘蛛到底会不会跟?答案不是简单的“会”或“不会”,而取决于你用的是哪一种跳转,以及爬虫在解析这一层时走到了哪一步。

先把三种“跳转”分清楚

  • 链接跳转:入口页里写一个普通的 a 标签,href 指向目标 URL。这是爬虫最明确、最容易处理的形式。
  • 服务器跳转:入口页返回 301、302,浏览器地址栏直接变到目标 URL。这是 HTTP 层面的信号,通常在抓取入口页时就已经完成。
  • 页面内跳转:入口页正常返回 200,HTML 里写着 meta refresh,或者用 JavaScript 的 location.href 把自己送到目标 URL。这属于“渲染 / 解析阶段”的行为,也是最不确定的一类。

很多人把后面两类混在一起谈,其实它们的表现差别不小,尤其在蜘蛛池这种“入口页数量多、目标 URL 数量更多”的场景下,差别会直接体现在抓取日志里。

meta refresh 会被识别,但分量不如普通链接

主流搜索引擎对 meta refresh 是有处理的:常见的写法是在 head 里放一条类似 content="0;url=目标地址" 的标签,延迟为 0 或很小的时候,解析器一般能从中读出目标地址,并把它当作一个可访问的 URL。也就是说,meta refresh 里的目标并不是完全不可见。

但“能读出来”和“当作链接跟进”是两件事。实际表现上,meta refresh 经常被当成页面的一种跳转属性来处理,而不是像 a 标签那样直接进入待抓取队列。结果通常是:目标 URL 被发现了,但抓取优先级偏低,跟进时间点也更靠后。如果延迟秒数写得比较大,比如 30 秒、60 秒,部分爬虫在解析时甚至不会把它作为跳转处理,只当成页面里的一段文本。

JavaScript 跳转的发现更不稳定

用 location.href、location.replace 或者前端路由做的跳转,依赖的是爬虫是否执行页面脚本。能不能执行脚本,各家爬虫不一样,同一家爬虫在不同资源配额下也可能不一样。即使能执行,一般也要排进渲染队列,等待时间明显长于直接解析 HTML。

所以在蜘蛛池里,纯 JS 跳转是最不该当作唯一入口路径的一种写法。它不报错,页面人眼看也正常,但目标 URL 可能长时间停留在“已发现未抓取”,日志里只看到入口页被访问,看不到目标页。

和标准 a 链接相比,差在哪

  • 发现明确度:a 标签是最清晰的信号;meta refresh 次之;JS 跳转最模糊。
  • 抓取时机:a 标签通常在解析入口页时就被登记;meta refresh 往往延后;JS 跳转要等渲染。
  • 可验证性:a 标签能在日志里直接对应到目标 URL 的请求;跳转方式经常只能看到入口页,目标页迟迟不出现。
  • 容错性:链接写错还能靠爬虫反复尝试;跳转写错,往往连“有过这个目标”都看不出来。

实际操作上的几点建议

  1. 入口页的主路径尽量保留标准 a 标签,href 写完整绝对地址,跳转只作为辅助。
  2. 如果确实要用 meta refresh,延迟尽量设小,并把地址写在 head 里,不要用 JS 动态写入。
  3. 别把跳转代码塞进 noscript,或者让跳转依赖用户交互(点击、滚动)才触发。
  4. 避免多层 meta refresh 串联,一层接一层会让爬虫在解析链上消耗更多预算。
  5. 入口页本身要能正常返回 200,跳转目标和入口页不要跨到完全无关的站点。
  6. 用抓取日志和站点后台的抓取统计核对:目标 URL 有没有实际请求记录,间隔多长,是不是只抓了一次。
需要提醒的是,无论用哪种跳转方式,都只是给搜索蜘蛛提供一个发现 URL 的路径,并不代表目标页一定会被收录或获得排名。跳转方式能改善的是“被发现和被跟进”的概率,收录结果仍取决于目标页本身的质量和站点整体情况。

如果非要在几种写法里排序:标准链接最稳,meta refresh 次之,纯 JS 跳转最不可靠。做蜘蛛池时,把入口页的跳转方式统一成普通链接,再用日志确认目标 URL 是否真的产生了抓取请求,比反复调整跳转参数要有效得多。