2

这是否适用于禁止目录下的页面,但仍允许该目录 url 上的页面?

Allow: /special-offers/$
Disallow: /special-offers/

允许:

www.mysite.com/special-offers/

但阻止:

www.mysite.com/special-offers/page1

www.mysite.com/special-offers/page2.html

ETC

4

2 回答 2

2

看过谷歌自己的robots.txt 文件后,他们所做的正是我所质疑的。

在第 136-137 行,他们有:

Disallow: /places/
Allow: /places/$

所以他们阻止了地点下的任何东西,但允许根地点 URL。与我的语法的唯一区别是顺序,即Disallow在先。

于 2013-06-13T09:37:46.863 回答
1

标准

根据HTML 4.01 规范,附录 B.4.1中允许的值Disallow(没有双关语)是部分 URI(表示部分或完整路径),仅:

“Disallow”字段指定不被访问的部分 URI。这可以是完整路径,也可以是部分路径;不会检索以该值开头的任何 URI。例如,

禁止:/help禁止 /help.html 和 /help/index.html,而

禁止:/help/将禁止 /help/index.html 但允许 /help.html。

我认为从那以后没有任何改变,因为当前的HTML5 规范草案根本没有提及robots.txt

扩展

然而,在实践中,许多机器人引擎(例如Googlebot)在他们接受的内容上更加灵活。例如,如果您使用:

Disallow: /*.gif$

然后 Googlebot 将跳过任何带有gif扩展名的文件。我认为你可以做这样的事情来禁止文件夹下的所有文件,但我不是 100% 确定(你可以用Google Webmaster Tools测试它们):

Disallow: /special-offers/*.*$

其他选项

无论如何,您不应该过分依赖这一点(因为每个搜索引擎的行为可能不同),因此如果可能的话,最好使用元标记或 HTTP 标头。例如,您可以配置您的网络服务器以将此标头包含在不应索引(或遵循)的所有响应中:

X-Robots-Tag: noindex, nofollow

在您的特定网络服务器中搜索执行此操作的最佳方法。这是Apache 中的一个示例mod_rewrite,结合以mod_headers根据 URL 模式有条件地设置一些标头。免责声明:我自己没有测试过,所以我无法判断它的效果如何。

# all /special-offers/ sub-urls set env var ROBOTS=none
RewriteRule ^/special-offers/.+$ - [E=ROBOTS:none]

# if env var ROBOTS is set then create header X-Robots-Tag: $ENV{ROBOTS}
RequestHeader set X-Robots-Tag %{ROBOTS}e env=ROBOTS

(注:none相当于noindex, nofollow

于 2013-01-31T07:33:56.147 回答