在我的网站上,我有一些形状如下的网址: https://www.MyShop.com/648-category-name?n=50&%253Bn=10&id_category=81
当访问者将每页的默认数量产品从20(默认值)更改为50时,会创建此类网址。
无需索引此类网址。此外,这些网址可能被视为重复内容。
1-在robots.txt中,我提出以下指令:
2-在Google控制台网址设置中,我添加了以下参数:
此参数是否会更改用户看到的页面内容?
我设置:是:更改,重新排序或缩小页面内容
此参数如何影响页面内容:
我设置:其他
* Googlebot抓取此参数的哪些网址:
我设置:没有网址
3-但是这样做了,在Google控制台中,我收到一条消息,说网址已被阻止(在智能手机上,而不是在计算机上)。 它似乎是Googlebot-mobile抓取工具:
4-为了解决这个问题,我想知道是否有可能**进行301重定向
有人知道应该在htaccess文件中添加哪一行来进行这样的重定向吗?
我事先感谢任何人对此事的任何帮助。
帕特里克
答案 0 :(得分:0)
您可能希望这只能定位机器人,可能是通过匹配用户代理:
RewriteCond %{HTTP_USER_AGENT} (googlebot|google-mobile) [NC]
如果要将包含查询字符串的所有URL删除到裸URL,可以使用以下命令:
RewriteCond %{QUERY_STRING} .
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
如果您只想重定向特定的查询字符串组件,例如n=foo
:
RewriteCond %{QUERY_STRING} (^|&)n=(.+)(&|$)
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
如果您使用的2.4版本的apache版本不支持QSD
标记,只需将?
添加到%{REQUEST_URI}
即可。
修改1:
这很奇怪。此URI中的查询字符串:
https://www.MyShop.com/648-category-name?%252525252525253Bn=10
包含;
的{{1}}分号%3B
,然后百分号%
一遍又一遍地编码到%25
。
如果不解决如何修复该特定问题,您可以修改我上面所述的正则表达式以匹配百分比编码以及:
RewriteCond %{QUERY_STRING} (^|&)([%A-Za-z0-9]+)n=(.+)(&|$)
或者更简单,如果目标更少:
RewriteCond %{QUERY_STRING} (^|&)(.+)n=(.+)(&|$)
但是这也会匹配碰巧以n=
结尾的任何查询字符串组件,所以这个URI:
https://www.MyShop.com/648-category-name?somethingn=foo&id_category=42
也会被捕获。
由于您只是针对机器人,因此最好只是完全剥离查询字符串。如果这只是网站特定部分的问题,您还可以通过将这些重写规则放在location
块中来缩小网站上应用的位置:
<location /648-category-name>
RewriteCond %{HTTP_USER_AGENT} (googlebot|google-mobile) [NC]
RewriteCond %{QUERY_STRING} . # Or any of the other regexes
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
</location>
对您而言可能会或可能不可行的替代方法是添加percent-encoded,如rel="canonical"
meta tag中所述,或在robots.txt中添加Disallow: /*?*
以停止所有抓取查询字符串的网页,如this answer。
编辑2:
有更有效的方法来编写这些规则。
多个条件,由apache this answer分隔:
RewriteCond %{QUERY_STRING} (^|&)n=10(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)n=20(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)n=50(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)amp%(.+)(&|$) [OR]
RewriteCond %{QUERY_STRING} (^|&)%25252525(.+)(&|$)
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
作为单一条件,使用正则表达式[OR]
flag:
RewriteCond %{QUERY_STRING} (^|&)n=(10|20|50|amp%|%25)(.+)(&|$)
RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
由于高流量网站的性能原因,这可能很重要。