禁止或在带有 robots.txt 的子域上建立索引

问题描述 投票:0回答:5

我有 dev.example.com 和 www.example.com 托管在不同的子域上。我希望爬虫删除

dev
子域的所有记录,但将它们保留在
www
上。我使用 git 来存储这两个站点的代码,因此理想情况下我希望两个站点都使用相同的 robots.txt 文件。

是否可以使用一个 robots.txt 文件并让它从

dev
子域中排除爬虫?

robots.txt
5个回答
29
投票

您可以使用 Apache 重写逻辑在开发领域提供不同的

robots.txt

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^dev\.qrcodecity\.com$
    RewriteRule ^robots\.txt$ robots-dev.txt
</IfModule>

然后创建一个单独的

robots-dev.txt
:

User-agent: *
Disallow: /

5
投票

抱歉,这很可能是不可能的。一般规则是每个子域都单独处理,因此都需要 robots.txt 文件。

子域通常是使用带有 url 重写的子文件夹来实现的,该子文件夹执行您想要跨子域共享单个 robots.txt 文件的映射。以下是关于如何执行此操作的很好的讨论:http://www.webmasterworld.com/apache/4253501.htm

但是,在您的情况下,您希望每个子域有不同的行为,这将需要单独的文件。


3
投票

请记住,如果您阻止 Google 对子域下的页面建立索引,它们(通常)不会立即从 Google 索引中删除。它只是阻止 Google 重新索引这些页面。

如果 dev 子域尚未启动,请确保它有自己的 robots.txt 禁止一切。

但是,如果 dev 子域已经索引了页面,那么您需要首先使用 robots noindex 元标记(这需要 Google 最初抓取页面以读取此请求),然后为 dev 子域设置 robots.txt 文件一旦页面从 Google 索引中删除(设置一个 Google 网站管理员工具帐户 - 它有助于解决这个问题)。


0
投票

我希望 Google 删除 dev 子域的所有记录,但保留 www。

如果开发网站已被索引,则向爬网程序返回 404 或 410 错误以删除内容。

是否可以拥有一个排除子域的 robots.txt 文件?

如果您的代码完全静态,那么您正在寻找的非标准

host
指令

User-agent: *
Host: www.example.com

但是如果您可以支持模板语言,则可以将所有内容保存在一个文件中:

User-agent: *
# if ENVIRONMENT variable is false robots will be disallowed.
{{ if eq (getenv "ENVIRONMENT") "production" }}
  Disallow: admin/
  Disallow:
{{ else }}
  Disallow: /
{{ end }}

0
投票

您可以使用 nginx,而不是使用 robots.txt 来处理子域的排除。虽然上述方法已经足够了,但如果您想确保搜索引擎不会访问您的子域,您可以将 Nginx 配置为为所有用户代理或 Googlebot 等特定用户代理返回

404
403
状态代码。以下是返回
403 Forbidden
响应的示例配置:

server {  
    server_name subdomain.website.com;  

    location / {  
        if ($http_user_agent ~* (Googlebot|Bingbot|Slurp)) {  
            return 403;  
        }  
    }  
}  

要排除子域,您还可以将 HTTP 标头与 nginx 结合使用。将值为

X-Robots-Tag
的 HTTP 标头与您的响应一起发送,以确保页面不会被索引。
以下是如何在 Nginx 配置中添加 X-Robots-Tag 的示例:

noindex, nofollow

© www.soinside.com 2019 - 2024. All rights reserved.