.htaccess PHP / htaccess语言:存在GET参数时阻止索引

5cnsuln7  于 2022-11-16  发布在  PHP
关注(0)|答案(1)|浏览(161)

我想防止搜索引擎从索引与一些特定的获取参数。
示例:

  • https://www.example.com/mypage.php应该被索引
  • 不应对https://www.example.com/mypage.php?myparam=1进行索引

我有许多页面(超过10k)的获取参数是索引的顶部的主要页面,尽管发送了一个没有索引的标题。
我在robots.txt里有这个:

Disallow: /*?*myparam=

下面是html中的内容:

<meta name="robots" content="noindex" />

所有页面也有一个规范的引用主页(没有get params)
我想尝试以下方法,但如果我做错了,可能会产生灾难性的后果,我想检查一下我的方法是否正确:

<FilesMatch "\.php">
   <If "%{QUERY_STRING} =~ /myparam/">
       Header set X-Robots-Tag "noindex, noarchive"
   </If>
</Files>

这种方法可以吗?或者你认为有更好的方法吗?

ui7jx7zq

ui7jx7zq1#

我在robots.txt里有这个:

Disallow: /*?*myparam=

这就是问题所在
robots.txt防止搜索引擎机器人 * 抓取 * 您的网站。如果这些页面被链接到,这不一定会阻止这些页面被 * 索引 *。
如果您阻止了 crawling,那么搜索引擎机器人将不会看到HTML或X-Robots-Tag HTTP响应头中的 metarobots标记,因为该页面从未被请求过。
(虽然您通常会在搜索结果中得到通知,并带有沿着“由于此站点的robots.txt,此结果的说明不可用-了解更多信息”这样的搜索说明。
因此,您应该移除robots.txt档案中的项目。
然而,还有一个问题是,您如何确定页面是否被索引,以及这是否真的是一个问题。如果您使用site:搜索,则通常会返回在自然搜索中通常不会返回的URL。在robots.txt中被阻止的URL在自然搜索结果中返回是不常见的,因为“内容”通常,site:搜索是找到这些仅包含URL的“索引”URL的唯一方法。
所有页面也有一个规范的引用主页(没有get params)
如果URL的非参数版本是真正的规范版本(即不是完全不同的页面),这本身就足够了,并且是首选选项。
“canonical”标记(如果被接受)将有效地将链接汁传递到规范URL。
然而,规范标签只是“咨询”。如果谷歌确定规范网址不是真正规范的(例如,如果它是足够不同的),那么它被忽略。
您也可以在GSC中解析URL参数规范化。

<FilesMatch "\.php">
   <If "%{QUERY_STRING} =~ /myparam/">
       Header set X-Robots-Tag "noindex, noarchive"
   </If>
</Files>

UPDATE:结束“tag”应该是</FilesMatch>,而不是</Files>。或者,使用非正则表达式<Files ".php">指令(更可取)。
否则,这是“OK”的,除了它可能捕获太多的信息。它将在任何Map到 * 包含 * .php的文件的请求上设置X-Robots-Tag头-而不仅仅是文件扩展名(即使请求的URL本身不是针对.php文件),并且该请求在查询字符串中的任何位置包含字符串myparam(这有点笼统,因为它也会匹配abcmyparamxyz=1-如果这是可能的话)。
您可以更具体一些,避免使用<FilesMatch>指令。例如:

<If "%{REQUEST_URI} == '/mypage.php' && %{QUERY_STRING} =~ /(^|&)myparam=/">
     Header set X-Robots-Tag "noindex, noarchive"
 </If>

相关问题