入口页把蜘蛛带到目标页,靠的不只是页面上的链接,跳转也是常见手段。但跳转发生在 HTTP 层、HTML 层还是脚本层,蜘蛛的反应完全不同。选错方式,蜘蛛可能根本没走到目标页。
蜘蛛看到跳转时的第一反应
服务器端跳转(301、302)是 HTTP 响应头里的回答。蜘蛛发出请求后,还没开始解析页面内容就拿到了新地址,这是成本最低、也最容易被跟随的一类跳转。写在 HTML 或脚本里的跳转,蜘蛛得先把页面拿到手、解析甚至渲染之后才知道,中间多了一层不确定性。
四种跳转方式的实际差别
301:永久迁移
301 等于告诉蜘蛛「这个地址以后不用来了」。它会逐渐把原 URL 的抓取记录和权重信号转移到新地址,原地址在索引里会慢慢淡出。
如果入口页只是临时指路,用 301 就等于让入口站自己退场。蜘蛛池里打算长期复用的入口节点,一般不该用 301 把访问者全部送走。
302、307:临时指路
302 和 307 表示地址只是暂时变了,蜘蛛一般会保留原 URL 的抓取,也不会立刻做权重迁移,适合临时更换目标页的场景。
但如果一个入口页长期挂着 302,蜘蛛容易把它理解成一个不稳定的地址,抓取优先级和频率都可能往下调。临时跳转最好不要变成常态。
meta refresh:写在 HTML 里的跳转
meta refresh 需要蜘蛛先下载并解析 HTML 才能读到。延迟设为 0 时最干脆,设成几秒的延迟,蜘蛛未必愿意等。
这种方式还有一个副作用:如果入口页正文很薄、几乎只有一条 refresh 指令,蜘蛛容易把它归进空壳页那一类。即便最后跟过去了,对入口页本身的评价也不会高。
JS 跳转:不一定被执行
搜索引擎确实能执行一部分 JavaScript,但渲染是排队进行的,成本比直接读源码高。用 JS 跳目标页,蜘蛛读源码时可能什么都没发现,要等到渲染阶段才看到目标地址,也可能因为资源有限而错过。
把 JS 跳转当主力,等于把「蜘蛛能不能到目标页」这件事交给了渲染队列。
跳转链别拉太长
A 跳到 B,B 又跳到 C,C 才到目标页——这种多级跳转每多一层,传递的权重就被稀释一次,蜘蛛中途放弃的概率也更高。能一步到位就不要绕路。
更稳妥的几种选择
- 想长期保留入口页:用页面上的普通超链接指向目标页,入口页继续存在,蜘蛛还能重复来访。
- 临时换目标:用 302,别用 301。
- 整站永久搬迁:用 301,并且把新地址固定下来,不要来回改。
- 不确定是否被支持:不要用 JS 或 meta refresh 作为唯一通道,至少留一条可抓取的超链接。
跳转解决的是「把蜘蛛送过去」,但它同时也在消耗入口页自己。跳得越彻底,入口页留下的抓取价值就越少。
跳转是否生效,看日志最直接
调整跳转方式之后,翻蜘蛛日志确认两件事:目标页有没有出现蜘蛛的抓取记录;入口页的抓取频率有没有明显下滑。如果目标页的抓取量没变化,入口页的抓取却掉了,多半是跳转方式把入口页本身牺牲掉了。
另外,跳转后的目标地址尽量保持稳定。频繁更换落点,蜘蛛会重新评估整条路径,之前积累的抓取习惯也就白费了。