搭建蜘蛛池入口页时,经常有人纠结一个问题:入口页到底是老老实实放一个可点击链接,还是干脆用跳转把搜索蜘蛛直接送到目标 URL。前者看起来啰嗦,后者页面干净、代码少,还能顺便做统计。但从搜索蜘蛛发现 URL 的机制上看,这两条路的效果并不一样。
先说结论
如果入口页的核心目的就是让搜索蜘蛛发现目标 URL,普通 a 标签的 href 仍然是最稳妥的做法。跳转不是不能用,但它意味着蜘蛛要先访问入口页、再执行一次额外动作,中间任何一环出问题,目标 URL 就 discovery 不到。而 a 标签的 href 是 HTML 解析阶段就能拿到的,蜘蛛拿到列表后可以直接排进抓取队列。
meta refresh 和普通链接不是一回事
meta refresh 写在 head 里,content 值通常写成 0;url=目标地址。它对浏览器来说确实能跳转,但对搜索蜘蛛而言,它是一个页面级指令,不是一个链接。蜘蛛需要先把入口页抓下来、解析 HTML、识别这条指令、判断延迟时间,再决定要不要跟进。零秒刷新在多数引擎里会被当成跳转处理,但优先级通常低于 301,而且如果入口页每次都给不同目标,或者刷新目标和页面内容完全无关,很容易被当成可疑行为。
301、302 和 meta refresh 的差别
301 是服务器层面的永久跳转,蜘蛛跟进的确定性最高,原地址的信号也会往目标 URL 传递。302 是临时跳转,蜘蛛一般也会跟,但可能继续保留原地址。meta refresh 介于两者之间,属于页面自己声明的跳转,处理上更像一个弱化信号。也就是说,如果你确实要用跳转,服务器 301 比 meta refresh 更可靠。
JS 跳转的不确定性更大
location.href 这类写法需要蜘蛛执行 JavaScript。虽然主流搜索蜘蛛的渲染能力在提升,但渲染排队、渲染资源限制、页面超时都会影响结果。对于 URL 发现这种越快进队列越好的需求,把希望押在 JS 执行上,等于把时间拉长了。更糟的是,如果入口页本身没什么内容,渲染还可能被跳过。
实践中的写法建议
- 目标 URL 用 a 标签加完整 href 输出,蜘蛛解析 HTML 时就能拿到。
- 如果确实需要跳转,优先用 301,其次 302,尽量不用 meta refresh。
- 用 meta refresh 时,把延迟设为 0,同时入口页保留一段说明文字,别做成纯跳转空页。
- JS 跳转可以留给真实用户,但同时在 noscript 或页面底部放一个普通链接兜底。
- 跳转链不要套太多层,一层就够,层层跳转只会让抓取路径变长。
什么时候可以保留跳转
入口页本身面向真实用户、需要做站点迁移或活动落地页时,用 301 是合理的。但如果入口页纯粹是给搜索蜘蛛看的 URL 列表,跳转只会增加不确定性。这种情况下,一页放若干条普通链接,比一个漂亮的跳转更实用。
跳转解决的是用户看到哪个页面,链接解决的是蜘蛛知道哪些 URL。入口页的定位如果是后者,就别用前者的方案。
另外要提醒一点:入口页怎么布局,都只是让搜索蜘蛛有机会发现目标 URL,并不能保证目标页最终被收录。发现、抓取、索引是三件不同的事,入口页只作用在第一环。目标页本身能否被索引,还取决于内容质量、站点整体表现等因素。把它当成一条线索入口,而不是一张收录保证书,心态会更稳。