虽然查询参数深受开发人员和数据分析者的喜爱,但它们通常是 SEO 的噩梦。在网址(URL)后面的查询参数不仅会让搜索引擎创建重复的内容,还会浪费其抓取资源,进而影响排名。
URL 的定义
URL 是统一资源定位符,俗称 Web 上的地址,是对资源的引用,指定其在网络上的位置以及检索该资源的机制。
示例1:https://yousite.com/a.html,这是一个 URL 。
示例2:https://yousite.com/a.html?a=123,这是另一个 URL 。
为什么 URL 后面的参数会影响 SEO
上面的示例1和示例2,也许内容相同,也许内容不同,但这确实是两个不同的 URL 。
如果内容相同,这意味着搜索引擎会抓取两次,且获得的内容是完全相同的,这对于 SEO 来说是一个负面影响,也就是大家常说的网站中存在重复内容。
如果内容不同,搜索引擎也会更青睐不带参数的URL,因为 https://yousite.com/size-xl.html
看起来比 https://yousite.com/?size=xl
更可靠。
谷歌(Google)早已清晰的总结了这个观点:“过于复杂的 URL,尤其是包含多个参数的 URL,可能会创建不必要的大量指向网站上相同或相似内容的 URL,从而给爬虫带来麻烦。因此,Googlebot 可能会消耗比必要的更多的带宽,或者可能无法索引您网站上的所有内容。”
WordPress 中 URL 的查询参数怎么来的?哪些可以去除?
WordPress 在进行正确的“固定链接(Permalink)”设置后,除了自带的站内搜索结果页与静态文件资源外,仅留下简洁而精致的 URL 展示在前台。
WordPress 前台需保留的查询参数:
- 站内搜索 URL 示例:
https://yousite.com/?s=关键词
- 静态资源 URL 示例:
https://yousite.com/wp-includes/css/dist/block-library/style.min.css?ver=6.3.2
一般会将站内搜索结果页的 URL 通过 robots.txt 或使用 <meta name="robots" content="follow, noindex"/>
排除索引,而静态资源不会被搜索引擎当成网页内容抓取,故而这两个 WordPress 默认情况不会对 SEO 带来负面影响。
如果在前端(后台页面的查询参数不影响SEO)出现上述情况外的 URL 参数,都要尽量消除掉,否则可能会对 SEO 造成影响。
提示:后台页面的查询参数不会影响 SEO,例如:插件设置页面、帖子编辑页面等。此类 URL 因需要登录用户才能访问,所以搜索引擎是抓取不到的。
那些多余的 URL 参数一般是一些设计不佳的主题或插件带来的,因为优秀的开发者会采用 cookie 或 Ajax 技术替代查询参数。确实需要使用参数的URL,也应尽量让其静态化。
例如:Filter Everything PRO 前端内容过滤器插件将前端 URL 优化成:
https://yousite.com/brand-apple/color-blue/
而不是像一些劣质主题/插件弄成这样:
https://yousite.com/?brand=apple&color=blue
在选用 WordPress 主题或插件的时候应尽量避免存在此类问题的。
警惕被人恶意添加无效参数
最后介绍的这种情况比较特殊,可能是一些别有用心的人故意在网站的 URL 后面加上一些无效的参数。当网站使用百度统计或 Google Analytics 等的时候,这些带参数的URL只要被访问,就会投递至搜索引擎,可能被抓取。
如果网站未做特殊处理,这些带参数的 URL 在WordPress 默认情况下是可以被访问的。
例如:https://yousite.com/?a=发p
甚至参数的值里包含违规字词。
一旦搜索引擎抓取了一定数量的此类 URL 后,网站排名会受到严重打击。还有一些 更损的招,这里就不作介绍了,以免被别有用心的人利用。
如何消除 URL 中的无效参数
通过 Yoast SEO Premium 插件移除 URL 参数
Yoast SEO Premium 插件的 Crawl optimization 选项中,可设置指定参数有效,其它参数则重定向至原 URL。
Yoast SEO > 设置 > 高级 > Crawl optimization:

如上图,’s’ 是WordPress默认的站内搜索查询参数,所以添加至允许的参数中,如果还有其它的参数不需要过滤,也需添加到这里。注意只需添加参数键名,无需添加值,例如 size=xl
,参数键名为size。
通过 Nginx 配置移除 URL 参数
如果不用 Yoast SEO Premium 插件且使用 Nginx 的话,可将 WordPress 伪静态规则做如下修改:
# 去除 URL 中多余参数的 WordPress 伪静态规则
# 由站长帮原创:https://www.zhanzhangb.cn/tutorials/wordpress-url-remove-parameters.html
location / {
error_page 417 = @noparameters;
recursive_error_pages on;
if ($request_method = POST) { return 417; }
if ($arg_s != "") { return 417; }
if ($arg_p != "") { return 417; }
if ($arg_ver != "") { return 417; }
if ($args ~ "amp") { return 417; }
if ($arg_preview = "true") { return 417; }
if ($http_cookie ~* "wordpress_logged_in_") { return 417; }
if ($http_cookie ~* "comment_author_") { return 417; }
if ($http_cookie ~* "wp_postpass_") { return 417; }
if ($is_args){
rewrite ^/(.*)$ /\? redirect;
}
# BEGIN 安全标头
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
# END 安全标头
try_files $uri $uri/ /index.php?$args;
}
location @noparameters {
# BEGIN 安全标头
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "no-referrer-when-downgrade";
# END 安全标头
try_files $uri $uri/ /index.php?$args;
}
将以上代码替换掉原 WordPress 伪静态规则 后,WordPress 非登录用户在访问带参数的 URL 时,会自动302跳转至不带参数的 URL 。但排除这几种参数:’s’、’p’、’amp’ 、’ver’或前端预览页面。
对于 css 或 js 静态资源文件,在主机配置文件中应有单独的匹配规则,如:
location ~ .*.(js|css)?$ {
...
}
如没有这部分,静态资源的查询参数会被替换掉。使用宝塔面板创建的站点配置中默认包含。
提示:如 Nginx 主机中存在重复匹配的 location ,且优先命中其它规则的话,则可能会影响该配置的生效。
以上示例放入宝塔面板伪静态规则配置中测试通过。
如需付费定制 Nginx 规则,可联系本站客服。
采用 Rel=”Canonical” 标签
推荐在所有网页的 HTML 中添加 Rel=”Canonical” 标签。当一个页面与另一个页面具有相同或相似的内容,它会引导搜索引擎将排名权重合并到指定为规范的 URL。示例:
<link rel="canonical" href="https://www.zhanzhangb.cn/tutorials/wordpress-url-remove-parameters.html" />
部分 WordPress 主题为文章/页面默认添加了该标签,或者使用任意一款主流的 SEO 插件都能自动添加。
暂无评论内容