资讯文章 资讯 · NEWS
跳转页别乱做:目录站的 go.php 该怎么收进 robots 又不出漏洞
2026-10-22 约 1,417 字 预计阅读 4 分钟 yiyunkj
跳
点一个条目跳到目标站,中间经过自己域名下的一跳,这是导航站的常规做法。理由很实在:能记点击数,能在跳转前加个提示,出链也不会把权重铺得太直接。但这层中转做不好,麻烦比收益大。

图片来源:网络,版权归原作者所有,侵权请联系删除
明文 URL 参数是问题的源头
最常见、也最危险的写法是 /go.php?url=https://某个地址。参数值完全由访问者决定,服务器照着跳。这在安全上有个专门的名字:开放重定向,CWE 编号 601,OWASP 把它归在访问控制失效这一类下面。
危害不只是"被拿去钓鱼"这么抽象。攻击者可以构造 https://你的域名/go.php?url=https://假登录页,链接前半段是你的域名,用户信了,点进去被带到仿冒页面。更麻烦的是它还能在 OAuth 之类流程里当中转,因为很多授权服务只校验 redirect_uri 的域名是否可信。
改法很简单:中转页不接收 URL,只接收 ID。/go/12345 或 /go.php?id=12345,服务端拿 ID 去库里查出真实地址再跳。库里没有的 ID 直接 404,外部就无法指定任意目标。
Google 给过的六条建议
关于开放重定向,Google 搜索中心 2009 年专门发过一篇博客,到今天看依然是最实用的清单:
- 校验 referer,正常情况下点中转页的人都是从你自己站内过来的
- 如果脚本本该只跳站内,就明确禁止站外跳转
- 用白名单,所有出站地址先在库里登记,跳转前比对
- 给跳转签名:把目标 URL 做哈希,签名作为参数一起带上,服务端校验通过才跳
- 真用不上就删掉这个功能,很多站的中转脚本只是默认开着从没人用过
- 用 robots.txt 把跳转脚本排除掉,让它别出现在搜索结果里
那个 site:你的域名 加上一些跟你站点无关的词的搜法,现在也还能用。如果搜出一堆莫名其妙的结果,说明中转页已经被利用了。
状态码用哪个
中转不是搬家,用 302 或 307 更合适。301 是告诉搜索引擎"这个地址永久换地方了",可你的 /go/12345 一直是通往同一个目标,它没换地方,它只是个通道。用了 301,时间一长搜索引擎可能把中转页和目标站搞混。
还有一点,Google 的文档里说得很清楚:临时重定向会让原始 URL 留在结果里。所以如果你不想让这些中转页进索引,光靠状态码是不够的,得另外处理。
索引上怎么处理
三种做法,按推荐程度排:
| 做法 | 结果 | 适用 |
|---|---|---|
| 中转页 noindex + 允许抓取 | 不进结果,链接正常传递 | 最常用 |
| robots.txt 屏蔽 | 爬虫读不到,页面仍可能因外链被索引成无摘要结果 | 配合上一条 |
| 完全不做中转,直接出链 | 没有额外页面,但失去点击统计 | 小站、不在乎统计 |
如果中转页用了明文 URL 参数,被蜘蛛抓到后能派生出无数个带不同参数的 URL,每一个都是一张内容几乎一样的薄页面。这种情况下除了 noindex,还应该在 canonical 里指向不带参数的规范地址,或者干脆把 /go.php 这个路径整个屏蔽掉。
顺带说两件小事
一是跳转链。Googlebot 最多能跟 10 跳,官方建议控制在 3 跳以内、绝不超过 5 跳。目录站常见的一种蠢情况是:中转页 302 到目标站,目标站 http 跳 https,https 又跳带 www 的,www 再跳一次移动端——四跳出去了。这一串里的前两跳你自己能省掉,跳转前先探测目标站的最终地址,直接跳到最终态。
二是别在中转页上放广告或者"即将前往"的长时间倒计时。给用户看的和给蜘蛛看的不一样,属于明确写在垃圾政策里的隐蔽跳转。真要提示,一秒内跳走,别搞五秒等待。