很多人做入口页时,懒得写可点击的链接,直接放一段 meta refresh 或者 location.href 跳转。这样确实省事,但对搜索蜘蛛来说,“能不能跟过去”和“跟过去之后算不算发现新 URL”,是完全不同的两件事。
先说结论
结论分三档:服务端 301/302 最稳,meta refresh 次之,纯 JS 跳转最不稳定。三者都有可能被抓到,但可控程度差别很大。
meta refresh 搜索蜘蛛怎么处理
meta refresh 写在 head 里,属于 HTML 源码的一部分。蜘蛛抓取入口页时不需要执行 JS 就能读到这段内容,所以理论上它会解析并跟进目标 URL。这也是它比 JS 跳转更保险的原因。
但有两点容易被忽略:
- 延迟时间。写成 0 秒或 1 秒,被当成跳转对待的可能性较大;写成 30 秒甚至更长,很多实现会把它当成“内容稍后更新”的信号,不一定按跳转处理。
- 不能有干扰。head 里如果同时存在 meta refresh、canonical、noindex,几个信号会互相打架,最终按哪个执行不好预测。
JS 跳转为什么要打折扣
location.href、window.open、前端路由里的 push,都要等浏览器执行脚本之后才产生跳转。搜索蜘蛛是否执行 JS,取决于它用的渲染服务、脚本和资源是否被 robots.txt 屏蔽、页面是否在渲染队列里超时。
实际表现经常是:入口页日志里有蜘蛛访问,目标站日志里却没有对应记录。这不代表蜘蛛“不认”JS,而是这一次没走完渲染流程。
判断方法很简单:对一下两边的日志时间戳。入口页有访问,几秒内目标站也出现相同 UA 的访问,说明跳转链路是通的;如果只有前者,基本就是渲染这一关没过。
想让跳转更可靠,可以这样做
- 优先用服务端跳转。入口页只输出 301 或 302,Location 指向目标 URL,不依赖任何客户端执行。
- 必须用 meta refresh 时,延迟设为 0,head 里不要塞别的互相冲突的指令。
- 同时保留一个可点击的 a 标签。哪怕用户视觉上看不到,源码里存在链接,等于多给蜘蛛留了一条路径。
- 别把跳转写在 body 里靠后的 script 中,越靠后越容易被截断。
跳转之后,入口页要不要留内容
如果入口页除了跳转代码什么都没有,它就是一个纯空壳。空壳本身不是违规,但入口页数量大、内容高度雷同、只承担导流作用时,整站质量会被压低,蜘蛛的到访频率也可能跟着下降。建议至少保留一段和目标主题相关的独立文字,让这个页面有存在的理由。
几个常见误区
“跳转成功就等于被发现”。跳转只是让蜘蛛到达目标 URL,是否抓取、是否收录,还要看目标站本身的可访问性、内容质量和 robots 设置。
“多加几层跳转更安全”。恰恰相反,链条越长,中间任何一环失败都会断掉,入口页直接指向目标 URL 最好。
“用了跳转,蜘蛛就一定会频繁来访”。抓取频率由站点整体信誉和服务器响应决定,跳转只是其中一个小环节。
怎么验证
- 用不执行 JS 的抓取方式请求入口页,看返回内容里有没有完整的目标 URL。
- 对比入口页和目标站的访问日志,看 UA、时间、次数能否对上。
- 连续观察几天,如果目标站的蜘蛛访问始终为 0,先把跳转换成服务端跳转,再排查其他环节。
总结一下:跳转方式决定了蜘蛛“看到”目标 URL 的概率,而目标 URL 最终能不能被抓、被收录,是另一套独立的判断。把跳转这一段做扎实,只是把前面的路铺平,后面的结果仍要看目标页面自己。