如何修复GoogleBot和其他搜索引擎抓取工具无法抓取的索引页面?

时间:2012-08-04 00:44:58

标签: asp.net-mvc-3 http-status-code-404 http-redirect google-crawlers search-engine-bots

在现有的.Net MVC3网站上,我们实现了分页,其中URL看起来像www.mysite.com/someterm/anotherterm/_p/89/10,其中89是页码,10是每页的结果数。

不幸的是,大于3的页码链接中缺少rel="nofollow",而且这些页面也缺少<meta name="robots" content="noindex,nofollow" />

问题在于谷歌和其他一些搜索引擎现在已经将这些页面编入索引,并且现在正经常尝试抓取所有这些页面,这正如我们发现的那样开始对prod数据库服务器产生巨大影响。我们不希望所有这些额外的数千页被抓取,只有前几页。

我将代码还原为不包含分页的网站版本,这样我们的数据库服务器现在就不会那么难受。因此,虽然搜索引擎会为所有这些页面获得404错误,但我想知道这是否是最好的事情,因为过了一段时间我会再次介绍寻呼网站?

我可以将以下内容添加到web.config中,以便将所有404重定向到主页:

 <httpErrors errorMode="Custom">
     <remove statusCode="404"/>
     <error statusCode="404" path="/" responseMode="ExecuteURL"/>
  </httpErrors>

但是我认为这样做会被呈现为具有分页URL参数的所有页面的“重复内容”。

这里最好的想法是让那些404继续一两周 - 然后重新引入寻呼网站吗?

另一种选择可能是发布寻呼网站,添加一些代码以拒绝大于3的网页上的抓取工具。建议?

是否有更快捷的方式将这些网页从索引中删除,以便不会被抓取?

感谢。

3 个答案:

答案 0 :(得分:0)

除非作为最后的手段,否则我不会诉诸404,并且重复的内容可能会导致您失去网页排名。我要做的第一件事是创建一个Google Webmaster Tools帐户,并配置您希望如何抓取您的网页,删除网页,使用哪些属性等等。

为Bing做同样的(网站管理员工具),你应该在一两天内完成。 (Bing的引擎被许多其他搜索引擎使用,看起来你对Bing的更改也会流向他们。)

答案 1 :(得分:0)

尝试创建robots.txt大多数(非黑帽)抓取工具如果您将其放在robots.txt文件中,则应该尊重该网页的阻止。

这是一个工具: http://www.mcanerin.com/EN/search-engine/robots-txt.asp

谷歌的网站管理员工具也为您提供了很好的网站,也可以帮助robots.txt

答案 2 :(得分:0)

简单地将页面保留为404不会,因为这是永久删除。查看RFC 2616超文本传输​​协议 - HTTP / 1.1第10章。状态代码定义:

  

“请求的资源在服务器上不再可用,没有   转发地址是已知的。预计这种情况会发生   被视为永久性具有链接编辑功能的客户端应该   用户批准后删除对Request-URI的引用。如果   服务器不知道,或无法确定,无论是否   条件是永久的,状态代码404(未找到)应该是   用来代替。除非另有说明,否则此响应是可缓存的。

     

410响应主要用于协助网络任务   通过通知收件人资源是维护   故意不可用,服务器所有者希望如此   将删除该资源的远程链接。这样的事件很常见   限时,促销服务和属于的资源   个人不再在服务器的网站上工作。它不是   必须将所有永久不可用的资源标记为“已消失”或   保持标记任何时间长度 - 留给   服务器所有者的自由裁量权。“

我只是添加了一个新的ActuionResult方法:

    public ActionResult Http410()
    {
        return new HttpStatusCodeResult(410);
    }

并创建匹配“__p”的新路线:

routes.MapRoute(name: "WholeCountryResultsWithPaging__p", url: "{searchTerm}/__p/{pageNumber}/{pageSize}", defaults: new { controller = "Errors", action = "Http410", pageNumber = UrlParameter.Optional, pageSize = UrlParameter.Optional });