做网站SEO时,有些站长打开服务器日志、百度抓取诊断、Bing Webmaster Tools或者网站爬虫工具以后,会突然发现一个问题:
搜索蜘蛛抓了大量带问号、参数、筛选条件的动态链接。
例如:
/product?id=123
/products?color=red
/products?color=red&size=xl
/article?page=2&sort=new
/search?q=SEO
/?utm_source=xxx
/?sessionid=123456
网站后台明明只有几百篇文章、几百个产品,蜘蛛实际抓取的URL却可能已经达到几千、几万甚至几十万个。
这时候很多人会担心:
动态链接是不是不利于SEO?需要把所有带“?”的URL屏蔽掉吗?
先说结论:
动态URL本身不是SEO问题,真正需要处理的是动态参数不断生成重复、低价值甚至近乎无限的URL。
Google目前针对分面导航专门提醒,筛选参数如果不断组合,可能制造近乎无限的URL空间,造成过度抓取,并降低搜索蜘蛛发现真正重要新页面的速度。Bing当前站长指南也明确建议减少带大量参数的重复、低价值URL,以提高抓取效率和索引准确性。
所以看到蜘蛛大量抓动态链接以后,不要先做:
一刀切屏蔽所有“?”。
应该先判断:
这些动态URL到底有没有独立搜索价值。
第一:什么叫动态链接?
日常SEO里说的动态URL,通常指URL中携带参数,根据参数不同返回不同内容。
例如:
https://example.com/product?id=123
这里:
id=123
就是参数。
再比如电商网站:
https://example.com/products?brand=apple&color=black
代表:
苹果品牌 + 黑色筛选。
用户继续点击:
256G;
价格从低到高;
仅看有货;
URL又可能变成:
https://example.com/products
?brand=apple
&color=black
&storage=256
&sort=price
&stock=1
每改变一个条件,就可能产生新的URL。
动态URL并没有天然问题。
真正的问题在于:
参数组合数量可能远远超过网站真正存在的独立内容数量。
第二:动态URL为什么容易造成“蜘蛛抓取膨胀”?
假设一个商城只有:
1000个产品。
但筛选条件有:
品牌:10种
颜色:8种
尺寸:6种
价格区间:5种
排序方式:4种
库存状态:2种
这些条件如果能够任意组合,理论上就可能产生大量URL。
例如:
?brand=a&color=red
?brand=a&color=red&size=l
?size=l&brand=a&color=red
?brand=a&sort=price
?brand=a&sort=new
?brand=a&page=2
?brand=a&page=2&sort=price
很多URL最终展示的产品集合可能:
完全一样;
高度相似;
或者只是排序顺序发生变化。
Google当前明确指出,分面导航是网站产生过度抓取问题最常见的原因之一。蜘蛛需要先访问这些新URL,才能判断它们有没有价值,因此大量参数URL会消耗抓取和服务器资源。
这就是所谓:
Crawl Waste,抓取浪费。
第三:蜘蛛抓很多动态URL,会不会直接导致网站“降权”?
不能简单这么理解。
搜索蜘蛛抓取:
?sort=price
并不会因为看到一个问号就处罚网站。
真正可能产生影响的是后续结果。
例如网站有:
500个真正重要页面。
搜索蜘蛛却每天大量时间都花在:
?sort=
?filter=
?color=
?session=
?page=
这些重复URL上。
那么可能出现:
新文章发现变慢;
新产品抓取变慢;
服务器压力增加;
索引里出现大量重复URL;
核心页面信号被多个URL分散;
Sitemap和实际抓取结构越来越混乱。
Bing目前甚至直接把“输出大量重复内容或者含多个参数的低价值URL”列为需要避免的抓取问题,并明确指出抓取浪费可能延迟重要页面索引。
所以真正应该关注的是:
动态URL有没有挤占重要页面的抓取资源。
第四:第一步不要屏蔽,先把动态参数分类
看到:
?
不要全部屏蔽。
可以先把参数分成三类。
第一类:真正改变页面核心内容的参数
例如:
/product?id=123
其中不同id代表真正不同的产品。
这种动态URL可能就是网站正式产品页面。
当然不能直接屏蔽。
如果网站程序暂时只能使用这种结构,只要:
URL稳定;
页面内容独立;
Title独立;
canonical正确;
能够正常抓取,
一样可以做SEO。
搜索引擎并没有要求所有URL必须做成伪静态。
第二类:有独立搜索价值的筛选参数
例如一个工业品网站:
/products?category=pump&material=stainless
如果“304不锈钢泵”本身确实存在大量稳定搜索需求,而且页面具有:
独立标题;
产品列表;
介绍;
FAQ;
内链;
稳定URL,
就可以考虑把它作为真正的SEO分类页。
这时候它就不只是普通筛选器,而是一张:
搜索落地页。
第三类:没有独立搜索价值的参数
例如:
?sort=price
?sort=new
?utm_source=xx
?sessionid=xx
?view=grid
?ref=xxx
这些参数多数只是:
排序;
追踪;
会话;
展示方式。
页面核心内容没有真正变化。
这一类才是治理重点。
第五:最应该优先处理的是“同一内容对应很多URL”
比如一篇文章:
正式地址:
https://example.com/blog/seo-guide/
又因为各种参数出现:
/blog/seo-guide/?utm_source=wechat
/blog/seo-guide/?from=home
/blog/seo-guide/?ref=123
/blog/seo-guide/?sessionid=456
用户看到的正文完全一样。
如果搜索蜘蛛把这些地址都发现并抓取,就会形成重复URL。
Bing目前针对重复内容的官方说明明确把URL参数列为常见原因,并建议通过301、canonical和统一URL结构整合不同版本。
这类页面通常可以:
把canonical统一指向无参数规范URL。
例如所有版本:
/blog/seo-guide/?xxx
都设置:
<link
rel="canonical"
href="https://example.com/blog/seo-guide/"
>
告诉搜索系统:
真正应该作为主要版本的是这个URL。
第六:哪些动态URL适合直接用robots.txt限制抓取?
如果确定某一类参数:
不需要进入搜索结果,同时会产生大量无限组合,
就可以考虑从抓取层限制。
Google在当前分面导航指南里甚至直接建议,如果筛选URL没有必要进入Google Search,可以使用robots.txt阻止Googlebot抓取这些路径,从而节省服务器和抓取资源。
比如:
?sort=
永远只是排序。
可以根据自己网站的URL规则设置。
示意:
User-agent: *
Disallow: /*?sort=
如果还有:
?sessionid=
也可以根据真实规则处理。
但这里一定要注意:
robots规则不能照抄别人网站。
因为不同系统参数含义完全不同。
你的网站:
?id=
可能代表真正产品页面。
别人网站:
?id=
可能只是追踪参数。
如果直接一刀切:
Disallow: /*?
可能连真正需要搜索引擎访问的页面一起挡掉。
第七:robots.txt和noindex别混着用错
这是参数URL治理里非常容易犯的错误。
假设某个参数页目前已经被Google发现甚至进入索引。
你真正希望的是:
把它移出搜索索引。
这时候如果直接:
robots.txt
Disallow
搜索蜘蛛可能无法继续抓取这个页面,也就无法读取页面上的:
<meta name="robots" content="noindex">
所以:
不抓取
和:
不索引
是两个不同任务。
如果页面已经进入索引,又希望真正退出,通常需要先让蜘蛛能够访问并看到noindex,或者根据页面状态使用404、410等正确处理方式。
如果只是从一开始就确定:
这批筛选参数没有任何索引价值,而且主要目标是阻止无意义抓取,
robots.txt才更加适合。
所以千万不要机械理解成:
不想收录
=
一定写robots
第八:canonical能不能解决所有参数URL问题?
不能。
canonical很重要,但不适合拿来替代整个URL治理。
Google目前说明,canonical可以帮助搜索系统逐渐把不同筛选URL的信号集中到首选页面,也可能随着时间减少部分非规范URL抓取。
但Google同时指出,对大规模分面导航来说,canonical和nofollow通常没有直接限制抓取那么有效。
原因很好理解。
即使:
A参数URL
canonical → 主页面
Google仍然需要先访问A页面,才能读取canonical。
如果网站每天不断产生几十万个A、B、C参数组合,蜘蛛仍然需要消耗大量资源去发现和处理。
所以参数治理更合理的顺序是:
不需要搜索的参数
→ 尽量不要产生可抓取入口 / 限制抓取
需要存在但内容重复
→ canonical
有独立搜索价值
→ 正常索引
不能用一个canonical解决所有问题。
第九:站内不要主动给垃圾参数URL制造大量入口
这一步特别重要。
很多网站的参数URL并不是蜘蛛自己凭空猜出来的。
而是网站自己一直在给蜘蛛提供链接。
比如筛选模块:
<a href="?color=red">红色</a>
<a href="?color=blue">蓝色</a>
排序:
<a href="?sort=price">价格排序</a>
再加:
品牌;
尺寸;
分页。
搜索蜘蛛不断沿着这些<a href>继续发现更多组合。
Google针对分面导航也提到,可以通过nofollow减少部分筛选链接的发现,但必须注意,需要一致处理所有指向该URL的链接;而从长期治理来说,直接减少低价值URL的可抓取入口通常更加干净。
所以网站开发阶段就应该问:
这个筛选真的需要生成一个搜索引擎可以跟随的新URL吗?
如果只是用户界面状态,没有搜索价值,可以考虑其他实现方式。
第十:URL Fragment可以用于部分纯前端筛选,但不要乱改现有网站
Google目前说明,如果筛选状态使用:
#
也就是URL Fragment,
Google Search通常不会把Fragment之后的内容作为独立抓取URL处理。
例如:
/products#color=red
不会像:
/products?color=red
一样不断制造普通参数URL抓取空间。
对于一些:
只改变前端展示;
完全没有独立SEO需求
的筛选,可以在网站架构阶段考虑这种方案。
但已经运营多年的网站不要为了这一条建议直接重构全站URL。
任何URL架构改动都应该综合考虑:
历史收录;
排名;
用户体验;
前端实现;
301迁移。
第十一:空筛选结果一定要正确返回404
例如:
/products?color=green&size=999
根本没有任何产品。
有些程序仍然返回:
HTTP 200
页面显示:
暂无产品。
更糟的是,这些参数可以无限组合。
于是搜索蜘蛛不断抓:
200
200
200
200
误以为大量URL都有真实内容。
Google针对分面导航已经明确建议:
筛选条件没有任何结果时,应该返回HTTP 404。
无意义、重复的过滤组合和不存在的分页也应该正确返回404,而不是全部返回200或者重定向到一个通用空页面。
这一项对大型产品站特别重要。
第十二:参数顺序不同,也可能制造重复URL
例如:
/products?brand=a&color=red
和:
/products?color=red&brand=a
用户看到的结果完全一样。
程序却生成两个URL。
如果再增加:
size
price
sort
同一组筛选条件可能因为参数顺序不同,出现大量重复地址。
所以程序最好统一参数顺序。
Google同样建议,如果把过滤条件放在URL路径或参数结构里,应当保持逻辑顺序稳定,避免同一过滤条件重复出现。
例如统一:
brand
→
color
→
size
→
price
不要每次根据用户点击顺序随机生成。
第十三:跟踪参数UTM需要屏蔽吗?
例如:
?utm_source=wechat
&utm_medium=social
&utm_campaign=xxx
这类参数主要用于流量追踪。
页面内容本身通常没有变化。
从SEO角度,它们没有必要成为独立索引页面。
最重要的是:
canonical仍然指向不带UTM的正式URL。
例如:
https://example.com/seo/?utm_source=wechat
canonical:
https://example.com/seo/
同时网站自己的站内链接不要长期到处使用带UTM参数的URL。
UTM主要用于:
站外活动追踪。
不要为了统计站内按钮点击,给所有内链都加UTM。
否则网站自己会不断制造带参数的重复URL发现入口。
第十四:站内搜索结果URL要不要给蜘蛛抓?
例如:
/search?q=SEO
/?s=GEO
站内搜索可能随着任何关键词产生新URL。
理论上几乎无限。
Google当前URL结构指南明确建议,对搜索结果以及可能形成无限URL空间的动态地址,可以考虑通过robots.txt阻止Googlebot访问。
所以普通企业官网里:
站内搜索结果通常没有必要大量参与搜索引擎索引。
尤其WordPress:
?s=关键词
这类URL非常容易不断扩张。
如果搜索结果页面本身没有独立价值,就值得治理。
第十五:分页URL是不是也属于垃圾动态链接?
不一定。
例如:
/blog/page/2/
/blog/page/3/
分页本身可能承担:
帮助蜘蛛发现更深层历史文章
的作用。
所以不能看到:
page=
或者:
/page/2/
就全部屏蔽。
真正需要判断:
它是不是正常分页;
有没有真实内容;
有没有无限生成;
不存在的页码是否正确404。
例如实际只有10页:
/page/999999/
却仍然返回200。
这才是明显问题。
动态URL治理的原则始终都是:
先判断用途,再决定处理方式。
第十六:Bing里可以直接告诉搜索引擎哪些参数可以忽略
Bing Webmaster Tools目前在Site Scan里仍提供:
URL parameters to be ignored
相关配置。
Bing明确说明,动态查询参数可能导致同一个页面生成多个URL版本,因此站长可以告诉Bing:
哪些参数在抓取时可以安全忽略,从而减少重复抓取、节省抓取配额。
比如一些明显的:
追踪参数;
排序参数
可以结合真实网站情况使用。
不过这个设置只是辅助。
真正更值得优先修复的仍然是:
网站本身不要无限制造低价值URL。
不能因为站长工具里有参数忽略功能,就完全不治理程序。
第十七:蜘蛛抓取大量动态URL,怎么判断已经影响网站?
可以观察几个信号。
1. 日志里参数URL占比特别高
比如一天Googlebot抓10000次。
其中:
8000次都是?sort、?filter、?session。
显然存在抓取浪费。
2. 新文章抓取明显变慢
以前当天抓。
现在几天甚至更久。
同时日志显示蜘蛛还在疯狂访问大量参数URL。
就值得处理。
3. Search Console里发现大量重复URL
例如:
Duplicate;
Alternate page with canonical;
Crawled – currently not indexed
里面充满参数地址。
4. 服务器资源被参数抓取消耗
CPU;
数据库;
动态查询压力
明显增加。
5. 索引里出现大量非预期参数页
比如直接搜索网站,看到:
?sort=
?filter=
进入搜索结果。
这就说明URL规范化需要立即治理。
第十八:可以直接建立一张“URL参数治理表”
如果网站参数已经比较多,不要凭感觉改robots。
先统计。
例如:
| 参数 | 用途 | 内容是否变化 | 需要索引 | 处理方式 |
|---|---|---|---|---|
| id | 产品ID | 完全变化 | 是 | 保留 |
| page | 正常分页 | 变化 | 视结构 | 保留 |
| sort | 排序 | 基本不变 | 否 | 限制抓取 |
| color | 筛选 | 部分变化 | 部分 | 分情况 |
| sessionid | 会话 | 不变 | 否 | 删除/限制 |
| utm_source | 统计 | 不变 | 否 | canonical |
| ref | 来源统计 | 不变 | 否 | canonical |
做完这张表以后再配置:
程序;
robots;
canonical;
Sitemap;
内链。
比直接复制网上一份robots规则安全得多。
第十九:企业网站一般可以按照这套顺序治理
如果已经发现搜索蜘蛛抓了大量动态地址,可以直接这样处理。
第一步:导出动态URL
来源可以是:
服务器日志;
Search Console;
Bing Webmaster Tools;
网站爬虫。
第二步:统计参数类型
看主要是:
sort
filter
session
utm
search
page
中的哪些。
第三步:判断是否需要搜索价值
分别标记:
保留;
规范化;
禁止抓取;
删除。
第四步:统一canonical
重复版本全部指向真正的规范URL。
第五步:治理站内入口
不要继续让导航和筛选无限制造低价值链接。
第六步:优化robots
对于确定不需要抓取的大规模参数路径,再针对性限制。
第七步:清理Sitemap
Sitemap只放:
最终规范、希望参与搜索的URL。
Bing目前也明确要求Sitemap尽量只保留canonical URL,并及时移除重定向或失效页面。
第八步:继续看日志
观察几周后:
参数URL抓取占比是否下降;
核心URL抓取是否提高;
新内容发现速度是否改善。
第二十:举一个实际例子,看动态URL怎么处理
假设一个工业品网站有:
2000个产品。
服务器日志却发现搜索蜘蛛已经抓了:
60000多个URL。
主要是:
/products?category=pump
/products?category=pump&sort=price
/products?category=pump&sort=new
/products?category=pump&brand=a
/products?category=pump&brand=a&sort=price
/products?category=pump&brand=a&color=red
继续分析以后发现:
Category
不同分类有真实搜索需求。
保留。
Brand
部分品牌+分类存在搜索需求。
选择其中真正有价值的组合建设正式页面。
Sort
只改变排序。
不需要索引。
Color
用户搜索需求几乎没有,而且可以产生大量组合。
不需要蜘蛛无限抓取。
最终结构变成:
正式分类页
→ 正常抓取和索引
高价值品牌/分类页
→ 独立优化
排序参数
→ 限制抓取
低价值筛选组合
→ 限制抓取
重复URL
→ canonical统一
这样真正有搜索价值的页面可能只有3000个。
却避免搜索系统继续处理60000甚至未来几十万个URL。
这才是参数治理真正的价值。
最后:动态URL并不可怕,可怕的是网站自己制造了一个“无限URL世界”
所以,蜘蛛抓取很多动态链接到底有没有影响?
答案应该分两种情况。
如果这些动态URL:
每个页面内容真实独立;
URL稳定;
用户确实有搜索需求;
网站数量可控,
完全没有必要因为URL里带问号就全部改掉。
真正需要治理的是:
一个页面
↓
几十个参数URL
一个筛选器
↓
几万种组合
一个站内搜索
↓
近乎无限URL
Google目前已经明确把分面导航产生的无限URL空间视为常见的过度抓取来源,因为它会消耗服务器和搜索蜘蛛资源,并可能降低真正重要新页面的发现速度。Bing也明确建议减少参数URL、重复页面和低价值抓取,以提高传统搜索和AI Grounding的索引效率。
因此真正的处理逻辑不是:
动态URL
=
全部屏蔽
而应该是:
统计蜘蛛正在抓什么
↓
判断每类参数的用途
↓
有搜索价值的保留
↓
重复URL做canonical
↓
无限低价值参数减少入口或限制抓取
↓
空结果返回404
↓
Sitemap只提交规范URL
↓
持续看服务器日志和索引变化
做好以后,目标也不是让搜索蜘蛛:
抓得越少越好。
而是让有限的抓取资源更多地花在:
产品;
服务;
案例;
解决方案;
高质量文章
这些真正值得进入搜索结果的页面上。
这才是动态链接SEO治理最核心的目的。
评论
欢迎留下你的看法,评论会按站点设置审核展示。
0 条评论
还没有评论,来写下第一条吧。
请先登录后即可评论
登录评论已关闭