蜘蛛池里的入口页本身不是给人看的内容页,它的作用是把搜索蜘蛛引到目标 URL。所以「链接以什么形式出现」直接决定了这次抓取有没有意义。除了最常见的 a 标签,有人会用 meta refresh 跳转、iframe 嵌套,甚至让入口页直接 302 到目标页。对搜索蜘蛛来说,这三种方式的处理逻辑差别很大,混用之前最好先搞清楚各自能做到什么。
重定向是「页面代替」,不是「页面内链接」
HTTP 301/302 是页面级别的跳转。搜索蜘蛛确实会跟随重定向,但它的理解方式是:这个地址最终指向另一个地址,抓取结果记在那个目标 URL 上,入口页本身不会被当成一个「包含若干链接的页面」来看待。
这就带来一个限制:一次重定向只能指向一个 URL。如果入口页的职责是罗列几十个目标地址,用重定向根本做不到,只能一个入口页对一个目标页,池子的规模会成倍膨胀。另外 302 表示临时跳转,搜索蜘蛛可能反复回访入口页确认跳转是否变化,相当于把抓取次数花在确认上。跳转链拉长时(A 跳 B,B 再跳 C),跟随意愿通常也会下降,中间任何一环出错都会断掉。
meta refresh 能识别,但只适合单线场景
meta refresh 属于 HTML 层面的跳转,搜索蜘蛛一般能识别一部分,但通常只处理页面里第一条、延迟较短的跳转。这里有两个现实问题:一是 HTML 规范上同一页面写多条 meta refresh 是不合法的,浏览器只会采用其中一条,所以它天然无法承载「一页多链接」;二是 0 秒跳转虽然看起来干脆,却容易被理解为「这个页面已经转移了」,而不是「这个页面里有一批 URL」。
换句话说,meta refresh 适合的是旧站迁移那种单入口对单目标的场景,用它来分发目标 URL,等于把入口页退化成一条重定向记录。
iframe 里的链接,经常不算在这一页上
iframe 的内容是按自己的 URL 独立对待的。很多抓取系统不会把 iframe 内的链接算作外层入口页的出链,即使跟随,归属也可能记在 iframe 的源地址上,而不是入口页。用 iframe 把链接藏起来,收益通常不如直接把 a 标签写在正文里;如果因为模板原因必须用 iframe,建议在入口页正文再补一份同样的 a 标签,让链接有一个明确的出处。
更稳妥的入口页写法
- 批量目标 URL 一律用 a 标签,href 写完整的绝对地址,不要用 javascript: 或空值。
- 不要用 302 承载批量链接,重定向是单线的,不适合做分发。
- meta refresh 只保留给单入口对单目标的迁移页面,延迟不必强求 0 秒。
- iframe 里的链接当作不存在,需要时在正文重复一份。
- 链接文本、title 和周围的一两句话给点语义,方便判断这条 URL 大概是什么内容。
- 入口页的链接形式保持稳定,不要今天 a 标签、明天改成跳转,频繁变动会让抓取行为变得难以判断。
怎么确认搜索蜘蛛真的跟过去了
最直接的办法是看访问日志:在入口页被搜索蜘蛛访问之后的一段时间内,目标 URL 上有没有出现对应的抓取记录。如果日志里只有入口页被反复读取,目标 URL 迟迟没有动静,就回头检查链接形式、robots.txt 限制、nofollow 属性以及目标站本身的响应状态,而不是先急着加大入口页数量。
重定向回答的是「这个页面去哪」,a 标签回答的是「这个页面里有哪些 URL」。想批量分发目标地址,只能用后者。
把跳转和链接分开看待,能省掉很多排查时间。每次动手前先想清楚:这一次抓取,你是希望搜索蜘蛛记住入口页,还是希望它顺着入口页记住目标 URL。目的不同,写法就不该一样。