域名可以用于robots.txt文件吗?

4
我们在dev.example.com上有一个开发服务器,该服务器正在被Google索引。我们使用AWS Lightsail将开发服务器完全复制到我们的生产环境中 - dev.example.com和example.com都使用相同的robots.txt文件。 Google的robots.txt文档没有明确说明是否可以定义根域。我可以在robots.txt文件中实现特定于域的规则吗?例如,这种方式是否可行:
User-agent: *
Disallow: https://dev.example.com/

User-agent: *
Allow: https://example.com/

Sitemap: https://example.com/sitemap.xml

补充一点,这可以通过.htaccess重写引擎解决——我的问题特别是关于robots.txt的。
3个回答

4
不可以在robots.txt中指定域名。 Disallow: https://dev.example.com/是无效的。robots.txt排除标准的第6页说,禁止行应包含“路径”,而不是包括域名的完整URL。
每个主机名(域名或子域名)都有自己的robots.txt文件。因此,要防止Googlebot爬取http://dev.example.com/,您需要提供https://dev.example.com/robots.txt并提供以下内容:
User-agent: *
Disallow: /

同时,您需要从http://example.com/提供不同的文件,可能包含以下内容:

User-agent: *
Disallow:

Sitemap: https://example.com/sitemap.xml

如果同一份代码驱动开发和生产服务器,您需要根据是否在生产环境中运行来有条件地控制robots.txt的内容。
或者,您可以允许Googlebot同时爬取两个网站,并在每个页面中包含指向实时网站上该页面的URL的<link rel=canonical href=...>标签。请参见如何正确使用rel='canonical'

你能提供关于robots.txt的文档或源代码吗?规范链接是个好解决方案。 - franklylately
1
我编辑后添加了对规范的引用。您还可以使用Google的robots.txt测试工具来验证如果包含域名,Google将如何解释它。 - Stephen Ostermiller
我确认 disallow: http://dev.example.com/allow: http://example.com 完全被忽略了。 - franklylately

1
Google的创建robots.txt文档中指出,不允许在robots.txt中列出完整的域名:

“相对于根域名的目录或页面,您不希望用户代理程序抓取。如果规则涉及页面,则必须是浏览器中显示的完整页面名称。它必须以/字符开头,如果它涉及一个目录,则必须以/标记结尾。”


1
如果你正在使用Express Node.js,我通过检查请求头中的主机信息,并回复一个不允许机器人访问的robots.txt文件来解决这个问题。
app.get('/robots.txt', function (req, res) {
  if (req.headers.host === "localhost:8080" ||
    req.headers.host === "algonewbie.fly.dev") {
    res.type('text/plain');
    res.send("User-agent: *\nDisallow: /");
  }
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接