我有 dev.example.com 和 www.example.com 托管在不同的子域上。我希望爬虫删除
dev
子域的所有记录,但将它们保留在 www
上。我使用 git 来存储这两个站点的代码,因此理想情况下我希望两个站点都使用相同的 robots.txt 文件。
是否可以使用一个 robots.txt 文件并让它从
dev
子域中排除爬虫?
您可以使用 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: /
抱歉,这很可能是不可能的。一般规则是每个子域都单独处理,因此都需要 robots.txt 文件。
子域通常是使用带有 url 重写的子文件夹来实现的,该子文件夹执行您想要跨子域共享单个 robots.txt 文件的映射。以下是关于如何执行此操作的很好的讨论:http://www.webmasterworld.com/apache/4253501.htm。
但是,在您的情况下,您希望每个子域有不同的行为,这将需要单独的文件。
请记住,如果您阻止 Google 对子域下的页面建立索引,它们(通常)不会立即从 Google 索引中删除。它只是阻止 Google 重新索引这些页面。
如果 dev 子域尚未启动,请确保它有自己的 robots.txt 禁止一切。
但是,如果 dev 子域已经索引了页面,那么您需要首先使用 robots noindex 元标记(这需要 Google 最初抓取页面以读取此请求),然后为 dev 子域设置 robots.txt 文件一旦页面从 Google 索引中删除(设置一个 Google 网站管理员工具帐户 - 它有助于解决这个问题)。
我希望 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 }}
您可以使用 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