这是否适用于禁止目录下的页面,但仍允许该目录 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
这是否适用于禁止目录下的页面,但仍允许该目录 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
看过谷歌自己的robots.txt 文件后,他们所做的正是我所质疑的。
在第 136-137 行,他们有:
Disallow: /places/
Allow: /places/$
所以他们阻止了地点下的任何东西,但允许根地点 URL。与我的语法的唯一区别是顺序,即Disallow
在先。
根据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
)