【问题标题】:Google console block URLs robots.txt redirection 301Google 控制台阻止 URL robots.txt 重定向 301
【发布时间】:2018-05-05 23:06:20
【问题描述】:

在我的网站中,我有一些具有以下形状的网址: https://www.MyShop.com/648-category-name?n=50&amp%253Bn=10&id_category=81

当访问者将每页的默认产品数量从 20(默认值)更改为 50 时,会创建此类 url。

无需为此类网址编制索引。另外这样的 url 可以被视为重复内容。

1- 在 robots.txt 中,我输入了以下指令:

  • 不允许:/*n=

2- 在 Google 控制台 Urls 设置中,我添加了以下参数:

  • n=
  • 这个参数会改变用户看到的页面内容吗?

  • 我设置:是:更改、重新排序或缩小页面内容

  • 这个参数如何影响页面内容:

  • 我设置:其他

    *Googlebot 应抓取哪些带有此参数的网址:

  • 我设置:无 URL

3- 但是,在 Google 控制台中完成此操作后,我收到一条消息,指出该 url 被阻止(在智能手机上,而不是在计算机上)。 似乎是 Googlebot-mobile 爬虫:

  • 索引应该被 robots.txt 忽略的 URL 指令(从我在互联网上找到的,似乎并没有什么不寻常的)
  • 忽略 Google 控制台网址设置

4-为了解决这个问题,不知道能不能**做个301重定向

  • 来自任何带有 n=的网址
  • 到问号前的url内容**

有人知道应该在 htaccess 文件中添加哪一行来进行这样的重定向吗?

我提前感谢任何人在这件事上的任何帮助。

帕特里克

【问题讨论】:

    标签: .htaccess url redirect mod-rewrite


    【解决方案1】:

    您可能希望这仅针对机器人,可能通过匹配用户代理:

    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]
    

    如果您使用的 apache 版本早于 2.4 且不支持 QSD 标志,只需将 ? 附加到 %{REQUEST_URI} 即可。


    编辑 1:

    这很奇怪。此 URI 中的查询字符串:

    https://www.MyShop.com/648-category-name?%252525252525253Bn=10
    

    包含一个分号;,它是percent-encoded 转换为%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>
    

    对此的替代方案可能对您可行,也可能不可行,如在this answer 中解释的那样添加rel="canonical" meta tag,或在您的robots.txt 中添加Disallow: /*?* 以停止对带有查询的页面的所有抓取字符串,如this answer 中所述。


    编辑 2:

    有更有效的方法来编写这些规则。

    多个条件,以apache[OR] flag分隔:

    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]
    

    作为单个条件,使用正则表达式| operator

    RewriteCond %{QUERY_STRING} (^|&)n=(10|20|50|amp%|%25)(.+)(&|$)
    RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
    

    出于高流量网站的性能原因,这可能很重要。

    【讨论】:

    • 非常感谢 Eddie 的回复。
    • 非常感谢 Eddie 的回复。我在 htaccess 文件中添加了以下内容,它起作用了:RewriteCond %{QUERY_STRING} (^|&)n=(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]。但我也有一些 url,我没有找到正确的 301 重定向。此类网址具有以下结构:MyShop.com/648-category-name?%252525252525253Bn=10。您知道如何将这些网址重定向到MyShop.com/648-category-name。再次非常感谢您的任何帮助。帕特里克
    • 再次感谢埃迪。我终于在 htaccess 文件中添加了 5 个重定向。 RewriteCond %{QUERY_STRING} (^|&)n=10(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD] RewriteCond %{QUERY_STRING} (^|&)n=20 (.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD] RewriteCond %{QUERY_STRING} (^|&)n=50(.+)(&|$) RewriteRule ^ %{ REQUEST_URI} [L,R=301,QSD] RewriteCond %{QUERY_STRING} (^|&)amp%(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD] RewriteCond %{ QUERY_STRING} (^|&)%25252525(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]
    • 再次感谢您的帮助。我终于在 htaccess 文件中添加了 5 个重定向: RewriteCond %{QUERY_STRING} (^|&)n=10(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD] RewriteCond %{QUERY_STRING } (^|&)n=20(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD] RewriteCond %{QUERY_STRING} (^|&)n=50(.+) (&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD] RewriteCond %{QUERY_STRING} (^|&)amp%(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L, R=301,QSD] RewriteCond %{QUERY_STRING} (^|&)%25252525(.+)(&|$) RewriteRule ^ %{REQUEST_URI} [L,R=301,QSD]。我没有专门匹配用户代理。
    • 可能有更简单的写法,请参阅我的编辑。
    猜你喜欢
    • 2015-06-15
    • 2019-08-09
    • 2019-05-13
    • 2022-06-11
    • 2021-06-09
    • 1970-01-01
    • 2016-10-14
    • 2012-03-01
    • 2018-04-12
    相关资源
    最近更新 更多