如何使用robots.txt禁止除了在网站地图中的URL之外的所有URL?

3
我需要控制哪些URL可以被索引。为了做到这一点,我想让谷歌只索引我的站点地图中列出的URL,并禁止谷歌索引其他任何内容。
最简单的解决方法是,如果有一种方法可以配置robots.txt来拒绝所有内容:
User-agent: * Disallow: /
同时允许在以下列表中列出的每个URL:
Sitemaps: sitemap1.xml Sitemaps: sitemap2.xml
是否可以配置robots.txt来实现这一点?或者还有其他解决方法吗?

我投票关闭了这个问题,因为它不是一个编程问题,并且在 Stack Overflow 上是离题的。关于您网站的非编程问题应该在 [webmasters.se] 上提问。将来请在那里提出此类问题。 - Stephen Ostermiller
3个回答

3
这不是与robots.txt相关的答案,而是与机器人协议整体相关的问题。我过去经常使用这种技术,效果非常好。
据我所知,您的网站是动态的,为什么不使用机器人元标签呢?正如x0n所说,一个30MB的文件很可能会给您和爬虫带来问题,而且向30MB文件添加新行会导致I/O方面的麻烦。在我看来,您最好的选择是将类似以下内容注入到不想被索引的页面中:
<META NAME="ROBOTS" CONTENT="NOINDEX" />

该页面仍将被爬取,但不会被索引。您仍然可以通过robots.txt中的网站地图引用提交网站地图,无需担心不包含使用元标记进行机器人处理的页面,并且所有主要搜索引擎都支持此功能,我记得百度也是如此。

非常简洁明了。非常感谢。尽管实现我想要的方式需要花费很多时间,所以我最好开始动手:)) - Joakim

1

您需要为站点地图中的每个元素添加一个Allow条目。这很繁琐,但可以通过读取站点地图的方式编写程序来轻松完成,或者如果站点地图本身是以编程方式创建的,则可以基于相同的代码。

请注意,Allow是robots.txt协议的扩展,不是所有搜索引擎都支持它,尽管Google支持。


1
我真的不知道。无论是否如此,我会考虑构建URI关联,以便在robots.txt中只需要几个Disallow语句即可。否则,就允许它们被索引(如果被索引没有积极的负面影响,那么通常是好的,即使对你来说不是优先事项)。 - Jon Hanna
在评论区这样的地方很难详细解释这个问题。以下是简短的速成课程;在我的情况下,我们为每个客户拥有一个域名,它们共享同一个网站。属于域A的内容在域A的网站地图中分开。但是Google并不关心这一点,并找到属于域B的页面/内容,并将其“附加”到域A上。因此...这样做的结果是,在Google搜索结果中,我们会得到多个域上相同页面的结果。这就是我们需要防止的。 - Joakim
1
在这种情况下,我会尝试阻止它被发送。如果http://domainA/pathB不应该被发送,并且您不能将它们拆分为不同的应用程序,则在这种情况下发送404。然后,不仅谷歌不会索引它,而且也没有其他方法可以访问它。页面的基类中的某些内容,在global.asax.cs或HttpModule中可以捕获这些情况。 - Jon Hanna
1
我会谨慎对待任何情况,如果你向谷歌发送与其他地方不同的内容,它可能看起来像你试图操纵排名。 - Jon Hanna
这将会指出站点地图的位置,但同时也会阻止所有内容。如果您无法更好地重构网站,则只能采用大规模的robots.txt方法。 - Jon Hanna
显示剩余3条评论

0

谷歌仍会索引未包含在网站地图中的页面。这正是我想要避免的。此外(作为附注),对于像百度这样的搜索引擎,没有地方提交您的网站地图。他们只会找到列在您的robots.txt文件中的网站地图。 - Joakim
1
那么,您需要从站点地图自动生成您的robots.txt文件。这两种技术之间没有关系。 - x0n
如果我的 robots.txt 文件有 1,000,000 条条目,会引起任何问题吗? - Joakim
你需要向谷歌咨询这个问题。我想一个超过30MB的robots.txt文件可能会被忽略。 - x0n

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