【问题标题】:Subdomains that don't exist are indexed by Google - Zombie subdomain removal via .htaccess不存在的子域被 Google 索引 - 通过 .htaccess 删除僵尸子域
【发布时间】:2019-04-03 13:30:03
【问题描述】:

我遇到了一个不寻常的问题,即 Google 正在索引我网站中不存在的子域。看起来这些“子域”是由诸如w.ww. 之类的拼写错误创建的。甚至有一些 http://abc.www.example.com 被编入索引的实例。

我主要关心的是 SERPS 中的内容重复,因为这些不存在/僵尸子域中有几个已被 Google 索引。我希望这些子域要么退出 SERPS,要么被重定向到安全的 www。网站的版本。

我在 web 开发方面经验丰富,但服务器配置和.htaccess/mod 重写规则并不是我最大的优势。

目前有一个重写规则来强制整个站点使用 https - 是否可以对其进行修改以强制僵尸子域重定向到 https://www.?如果可能,我能否确保它不会影响网站的真实子域?

当前.htaccess 重定向:

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [NC,R=301,L]

【问题讨论】:

  • 这一点也不奇怪。每当请求未定义的主机名时,您的 http 服务器将提供默认主机。这是正常且记录的行为。如果您愿意,您可以阻止它,但这是您必须采取的明确步骤。
  • 感谢您的回答。我了解在这种情况下服务器会提供默认主机,但我从未体验过 Google 将此类请求编入索引。
  • Google 将所有页面接受到其索引中它找到的引用并且不阻止索引。您可以尝试找出这些链接是在哪里生成的,很可能是一些随机链接列表(点击劫持、错字劫持......),但最终这并不重要,因为您无法阻止它。相反,您可以阻止谷歌索引页面,只需定义您的 robots.txt 文件,这样机器人就不会索引那些不存在的页面。
  • 同意!这不是与网站本身相关联的东西,所以如果无法预防,我不会浪费时间寻找原因。我已经为所有页面添加了规范标签,并将单独的重写条件添加到 .htaccess 以将页面 301 添加到主要页面。我会看看在 robots.txt 级别可以做什么,但由于这些僵尸子域实际上并不作为子域存在,我不确定在根目录中编辑 robots.txt 是否是最好的方法。
  • 从技术角度来看,这些请求以有效和现有主机为目标,因为它们会从您的站点收到答复。因此,如果您愿意,您可以防止这种情况发生。不是通过重定向,而是通过阻止,尽管重定向它们可能对搜索引擎具有相同的效果,因为它们不遵循此类外部重定向。关于robots.txt 文件:您还想在哪里控制搜索机器人?

标签: apache .htaccess redirect mod-rewrite http-status-code-301


【解决方案1】:

要解决 cmets... 如果所有子域都指向同一个地方(同一个站点),则您不能在 robots.txt 中阻止 主机名(子域),除非您在内部重写这些请求不同的robots-block.txt 文件。但是,robots.txt 不一定会阻止 indexing,它会阻止 crawling,如果这些子域已经被索引,那么如果你只是简单地,它们将在一段时间内保持索引阻止抓取

您在共享服务器上吗?还是你有自己的?如果这是您自己的服务器并且您的站点是在其上定义的第一个(或唯一)主机,这将只是一个“默认主机”问题。 (这很少是共享服务器问题。)否则,这听起来像您在 DNS 中定义了一个“通配符”子域(以及服务器配置中对应的 ServerAlias)。

删除通配符子域,它将解决您的问题。

否则,您可以重定向(或阻止).htaccess 中的任何非规范主机。例如:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com
RewriteRule ^ - [F]

对于任何不针对example.comwww.example.com 的请求,上述内容都会发送403 Forbidden。


旁白:

RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.example.com/$1 [NC,R=301,L]

这是不正确的。它只规范化http://example.com。它不会规范化/重定向http://www.example.comhttps://example.com,因为这两个条件是隐式与的。你需要OR这两个条件:

RewriteCond %{HTTP_HOST} ^example\.com [NC,OR]
RewriteCond %{SERVER_PORT} 80

为了匹配example.com http

【讨论】:

  • 非常感谢@MrWhite 的详细回答。我很欣赏这个解释,因为这不是我最大的优势。该站点托管在共享服务器上,但也使用 CDN,因此那里的 DNS 设置完全有可能设置了“通配符”子域 - 所以我一定会先检查一下。我已经从以前的开发人员那里接管了该站点,该开发人员不再可以联系 - 我不确定为什么会设置通配符子域,如果是这种情况 - 配置通配符是否有任何好处,除了拥有是否能够从任何主机名访问网站?
猜你喜欢
  • 1970-01-01
  • 2012-07-02
  • 2011-03-30
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-06
相关资源
最近更新 更多