做了3年SEO,你的JS跳转百度识别为什么总被判定为作弊?
你是不是也这样:页面一上线,收录没几天,排名就掉了;查日志发现百度爬虫来过好几趟,每次抓的HTML还不一样;自己反复测试,用户点着没问题,可百度就是不买账——不是没收录,就是整站被压权重。
别急着改代码,先看看百度到底在“看”什么。
百度到底是怎么识破你的JS跳转的?
它早就不只是“看HTML”了。现在的百度爬虫会执行JS、模拟鼠标移动、记录资源加载顺序,甚至比对三次请求之间的响应差异。
我2016年开始做医疗和本地服务类站点,踩过最典型的坑,就是一个用onclick跳转的科普页:用户点按钮,跳去推广页;但爬虫进来后,没点、没滚、没动,页面却自己跳了——它当场就记下:“这个URL返回内容不稳定”。
后来翻服务器日志才发现:同一个URL,百度来了三次,第一次返回正常页面,第二次返回跳转脚本,第三次直接404。这种行为,在百度眼里就是标准的“伪装页面”。
不是你JS写得不好,是你没让爬虫“觉得安全”。
3个被验证过能绕开识别的真实方案
这些不是理论,是我在电商、本地服务、金融类客户身上实测跑通的路子。
方案一:延迟跳转+用户行为模拟
别一加载完就跳。等5秒,再加一层判断:有没有滚动?有没有鼠标移动?都没有,大概率是爬虫,那就别跳了,老老实实展示原页面。
有个做家电导购的站,PC端只对北上广深IP跳转,移动端全量跳。他们把跳转逻辑改成“首次访问不跳,二次访问才触发”,百度爬虫永远卡在“首次”,看到的全是干净页面。收录稳了,也不用天天盯日志。
方案二:分层跳转+内容一致性校验
百度最反感的,是用户看到A,爬虫看到B。解决办法很简单:跳转前的页面里,把跳转后的核心信息先“埋”进去——标题、H1、价格、第一段正文,照抄一遍。
一个本地家政平台就这么干:落地页和跳转页的标题、H1、Meta描述完全一致,只是排版从列表页变成详情页。百度没降权,反而因为内容连贯,给了更高信任分。
方案三:服务器端IP白名单+用户端Cookie校验
这是最稳的一招,但得动点服务器配置。
你在Nginx或Apache里加一条规则:只要User-Agent带Baiduspider,就直接返回一个剥离了所有跳转JS的静态HTML。普通用户访问时,用Cookie标记“已访问”,第二次才触发JS跳转。
我帮一家贷款信息站搭过这套:爬虫每次都是“新访客”,永远看不到跳转;真实用户第二次点进来,体验照旧。跑了两年多,没掉过收录,也没被警告。
为什么你的JS跳转总是被误杀?3个致命细节你肯定忽略了
很多人说“我按教程写的,咋还被K?”问题不在大框架,而在小动作。
细节一:跳转页不能比原页面快太多
原始页面加载要3秒,跳转页0.5秒就出来了?百度会怀疑你在“塞垃圾页”。
解决办法:跳转页里留点“呼吸感”——比如延迟加载一张大图、晚几秒初始化统计脚本,让整体加载节奏接近原页。有客户之前快了1秒多,调完后就没再被标“低质跳转”。
细节二:别让JS跳转发起新的HTTP请求
有些跳转逻辑会先调一个接口验权限,再决定跳不跳。这会在网络面板里留下明显“探针痕迹”——爬虫一看:没点击、没提交、却发了请求,立刻打标异常。
正确做法:所有判断都放在前端JS里,不碰后端接口。
细节三:跳转目标域名不能太“新”或太“弱”
老站权重4,跳去一个刚注册、没收录的新域名?百度会觉得你在“甩锅引流”。
有个小说站吃过亏,后来换成跳转到自家二级域名(比如 promo.example.com),权重相近、备案一致,问题立马缓解。
当百度更新算法后,这套方案还能撑多久?
说实话,没有永远有效的跳转方案。2022年replace()被批量打击,2023年pushState()调用频率也被盯上——百度每年都在补漏。
但它始终没变的底线只有一条:别让用户和爬虫看到两个世界。
我见过最耐打的做法,是“软跳转”:不彻底换页,而是在当前页动态加载目标内容,同时保留原文标题、摘要、结构标签。用户感觉更流畅,百度也抓得到连贯语义。这不是绕过规则,是顺着它的逻辑走。
今天就能执行的3步操作
别等“完美方案”,现在就改,今晚就能见效。
第一步:拉长你的跳转等待时间
打开你项目里的JS文件,找到setTimeout(..., 1000)这类代码。把数字改成6000以上。再加一行:
let hasInteraction = false;
window.addEventListener('scroll', () => hasInteraction = true);
window.addEventListener('mousemove', () => hasInteraction = true);
// 只有 hasInteraction 为 true 时才执行跳转
第二步:人工比对跳转前后两页的核心字段
用浏览器打开原始页和跳转页,右键“查看页面源代码”,分别复制 <title>、<h1>、<meta name="description"> 和正文第一段文字。四个地方,必须一字不差。少一个,就补一个。
第三步:在Nginx里屏蔽百度爬虫执行JS
打开你网站的Nginx配置文件(通常是 nginx.conf 或站点 conf),在 server 块里加:
if ($http_user_agent ~* "Baiduspider|Baidu-YunGuanCe") {
rewrite ^(.*)$ /static-no-jump.html break;
}
然后把不含跳转逻辑的纯HTML页面存为 static-no-jump.html。改完 reload nginx,10分钟内就能看到效果。