你点开百度统计,发现一堆长得一模一样的页面URL,后面却拖着?sid=abc123&token=xyz这种尾巴。内容没变,但收录就是卡住不动——不是内容不行,是搜索引擎被这些“假页面”绕晕了。
别急着改文案、堆外链,先揪出这个藏在URL里的小鬼:会话ID参数。
什么是会话ID参数?它为什么是SEO的“隐形杀手”?
会话ID参数是网站用来临时标记用户身份的一串字符,比如 sid、sessionid、PHPSESSID、token。你登录账号、提交表单、甚至只是在后台多刷了两下页面,它就悄悄塞进URL里。
对人来说,这串字符无所谓。对搜索引擎爬虫来说,这就是灾难现场。
它看到 /product/123?sid=aaa 和 /product/123?sid=bbb,会当成两个完全不同的页面。
一个真实页面,被生成几十上百个“分身”,爬虫的时间全耗在认这些“双胞胎”上。
真正该被重视的首页、栏目页、详情页,反而排不上队。
更麻烦的是,这些带参URL容易被判定为重复内容,或者软404。
结果就是:你的站明明有2000个有效页面,搜索引擎只当它只有200个。其余1800个,直接进了冷宫。
2个核心方法:彻底过滤会话ID参数
方法一:在robots.txt中直接封杀参数
打开你网站根目录下的 robots.txt 文件,在最后加上这几行:
Disallow: /*?sid=
Disallow: /*?sessionid=
Disallow: /*?PHPSESSID=
Disallow: /*?token=
Disallow: /*?user_id=
意思是:所有带这些参数的URL,别来抓了。
操作简单,5分钟能搞定。
风险也有——如果哪天CMS悄悄把参数名改成 session_key 或 auth_token,而你没更新规则,它又会偷偷溜进来。
真实案例:一家在线教育公司用Discuz!搭论坛,用户点击私信链接时,URL自动带上 ?from=groupmessage&sid=xxx。结果帖子页面几乎不被收录。他们只加了一条 Disallow: /*?sid=,两周后,搜索流量明显回升,新发帖的自然曝光也多了不少。
方法二:通过CMS或服务器端重写URL
如果你用的是WordPress、织梦、帝国CMS这类系统,后台一般都有“URL参数过滤”或“忽略参数”的设置入口。
以WordPress为例,装好Yoast SEO插件后,进「高级设置 → 允许参数」,把 sid、token 这些词加进「忽略的参数」列表就行。
如果你能碰服务器配置,推荐Nginx或Apache直接做重写。比如Nginx里加这一段:
if ($args ~* "sid=") {
rewrite ^(.*)$ $1? permanent;
}
效果是:用户或爬虫一发起请求,参数当场被抹掉,连服务器都收不到。干净、彻底。
当然,得稍微懂点配置,或者拉开发同事一起看一眼。
真实案例:一家B2B企业站用自研CMS,每个页面URL都挂着 ?user_token=abcdef。SEO团队天天催,技术组花了半天,在Nginx里加了重写规则。之后一个月,被收录的有效页面数量大幅增长,几个主推关键词的排名也稳住了。
如何避开3种常见的“过滤陷阱”?
陷阱一:过度过滤,把正常参数也砍掉了
不是所有参数都要删。?page=2 是分页,?category=books 是分类,?sort=date 是排序逻辑——这些是帮搜索引擎理解你网站结构的重要线索。
一刀切全封掉,反而会让爬虫看不懂“第2页”和“第1页”的关系,重复问题更严重。
判断很简单:去掉这个参数,页面内容还一样吗?
一样 → 过滤;不一样 → 留着。
比如 ?sid=abc 和 ?sid=xyz,内容完全一致,必须干掉。
但 ?page=1 和 ?page=2,展示的商品不同,就不能动。
陷阱二:只在robots.txt里限制,但页面仍然有参数
robots.txt 只是“请勿入内”的告示牌,拦不住别人从外面把带参链接发进来。
微信里分享一个商品页,URL带着 ?sid=xxx,朋友点开、转发、再点开……参数就这么一路传下去。
搜索引擎也可能从外部链接里发现这些URL,然后照常抓取——毕竟 robots.txt 不管“怎么被发现”,只管“抓不抓”。
解决办法是加一层301跳转:只要URL里出现会话ID,立刻跳到干净版。
Nginx里可以这样写:
if ($args ~* "sid=") {
return 301 $scheme://$host$uri?;
}
用户点开带参链接,浏览器一闪,地址栏就变成清爽的版本。爬虫也一样。
陷阱三:忽略AJAX和SPA中的会话ID
现在很多网站用Vue、React做单页应用(SPA),会话状态可能根本不在URL里,而是存在请求头、localStorage,或者通过API动态注入。
这时候,你在URL上做文章,等于打空气——爬虫压根看不到参数,但页面内容还是乱的。
应对思路很实在:确保首页、列表页、详情页这些关键页面,是服务端渲染(SSR)出来的。
如果技术上实在做不到SSR,至少在 <head> 里补上 canonical 标签:
<link rel="canonical" href="https://example.com/product/123">
告诉搜索引擎:“这才是正主”。不过得心里有数——这招是备选,不是万能钥匙。
会话ID参数对移动端和AMP页面有影响吗?
有,而且更难察觉。
微信里分享一个商品页,链接自动带上 ?sid=xxx,朋友点开、截图、再发群里……这个带参URL就在私域里反复传播。
搜索引擎的移动爬虫来抓的时候,看到的是一堆“看似不同”的页面,收录效率直接打折。
AMP页面更敏感。AMP缓存系统对URL要求极严:必须稳定、静态、无动态参数。
有家电商站上线AMP时没处理会话ID,结果所有页面都被缓存系统拒之门外,调试了整整三天才找到根子在这儿。
解决方案也很直接:在生成移动端和AMP页面链接的代码里,硬性去掉会话ID。
需要保留用户状态?用 cookie 或 localStorage,别往URL里塞。
为什么过滤后收录量没涨?3个自查方向
方向一:检查参数是否真的被过滤了
去百度资源平台或谷歌Search Console,翻到「抓取统计」或「URL参数」报告。
如果还有大量带 sid、token 的URL出现在抓取列表里,说明规则没生效。
常见原因:robots.txt 写错位置(比如漏了问号)、Nginx配置没 reload、CMS缓存没清。
快速自查:在百度搜 site:你的域名 sid,看看结果页里带参URL占比高不高。
如果超过两成,基本可以确定没拦住。
方向二:看看参数是否有“变种”
有些系统会轮着换马甲:今天叫 ?sid=xxx,明天变 ?session_key=xxx,后天又冒出 ?_t=123456。
更狡猾的是,把会话ID伪装成路径的一部分,比如 https://example.com/xxx123/product/,看着像静态地址,其实是动态路由。
解决办法很土但管用:花15分钟,用爬虫工具(比如 Screaming Frog)或浏览器控制台,把全站URL拉一遍,用正则筛出所有疑似会话ID的字段,列成清单,一条条补进过滤规则。
方向三:检查是否被其他问题掩盖了
会话ID过滤,只解决“重复抓取”这个单一问题。
它不会自动帮你提升内容质量、增加外链、加快首屏加载。
如果过滤完还是没动静,很可能卡在别的地方:比如最近内容更新太水,或者服务器响应慢到爬虫都懒得等。
过滤是清障,不是施法。清完路,你还得自己往前走。
今天就能执行的3步操作
打开你的
robots.txt文件(通常在网站根目录,用FTP、宝塔面板或主机后台都能编辑),在文件末尾粘贴以下内容(按你实际出现的参数名调整):Disallow: /*?sid= Disallow: /*?sessionid= Disallow: /*?PHPSESSID= Disallow: /*?token=保存后,在浏览器里访问
https://你的域名/robots.txt,确认新加的几行已生效。登录百度资源平台,进入「抓取工具 → URL参数规则」,把你刚才加的那些参数名(
sid、sessionid等)逐个添加进去,并选择「这些参数不影响页面内容」。
如果你也在用谷歌Search Console,同理进「设置 → URL参数」,把对应参数设为「不,不改变内容」。一周后,打开百度网页版,搜索
site:你的域名 sid,观察带参URL是否明显减少。
如果还是满屏?sid=,回到上文「3个自查方向」,重点看是不是参数变种没覆盖全,或者服务器配置没生效。