【问题标题】:Identifying a Search Engine Crawler识别搜索引擎爬虫
【发布时间】:2023-06-25 06:25:01
【问题描述】:

我正在开发一个通过 AJAX 加载数据的网站。我还希望整个网站都可以被谷歌和雅虎等搜索引擎抓取。 我想制作该网站的 2 个版本... [1] 当用户来的时候,超链接应该像 GMAIL 一样工作(#'ed超链接) [2] 当爬虫到来时,超链接应该正常工作(AJAX模式关闭)

如何识别爬虫??

【问题讨论】:

    标签: ajax web web-crawler


    【解决方案1】:

    爬虫通常可以通过 User-Agent HTTP Header 来识别。查看this page 以获取专门针对爬虫的用户代理列表。一些例子是:

    谷歌:

    此外,这里有一些获取各种语言的用户代理字符串的示例:

    PHP:
    $_SERVER['HTTP_USER_AGENT']
    
    Python Django:
    request.META["HTTP_USER_AGENT"]
    
    Ruby On Rails:
    request.env["HTTP_USER_AGENT"]
    
    ...
    

    【讨论】:

    • 感谢您的回答,我将对其进行更多搜索.. 但正如布赖恩所说,它可能会影响搜索引擎排名:(
    【解决方案2】:

    您不应向您的用户和抓取工具展示您网站的不同形式。如果 Google 发现您这样做,他们可能会因此降低您的搜索排名。此外,如果您有一个仅用于爬虫的版本,它可能会在您不注意的情况下中断,从而为搜索引擎提供不良数据。

    我建议您构建一个不需要 AJAX 的网站版本,并在每个页面上都有指向非 AJAX 版本的醒目链接。这也将有助于可能不喜欢 AJAX 版本或浏览器无法正确处理的用户。

    【讨论】:

    • 如果我为注册用户提供一个使用 AJAX 版本的选项怎么办?
    【解决方案3】:

    爬虫的 http 标头应该包含一个 User-Agent 字段。您可以在您的服务器上检查此字段。

    Here 是大量用户代理的列表。一些例子:

    Google robot 66.249.64.XXX ->
    Googlebot/2.1 ( http://www.googlebot.com/bot.html)       
    
    Harvest-NG web crawler used by search.yahoo.com 
    Harvest-NG/1.0.2     
    

    【讨论】:

    • 谢谢,我会搜索更多相关信息
    • 未来会出现什么样的搜索引擎
    【解决方案4】:

    这种方法只会让你的生活变得困难。它要求您维护站点的两个完全独立的版本,并尝试猜测要为任何给定用户提供哪个版本。搜索引擎并不是唯一没有 JavaScript 可用和启用的用户代理。

    遵循unobtrusive JavaScriptbuild on things that work 的原则。这避免了确定向用户提供哪个版本的需要,因为 JS 可以在离开工作的 HTML 版本时优雅地失败。

    【讨论】:

    • 我知道我的计划是用简单的 HTML 方式来做......只是为了增强页面加载到用户浏览器中,如果用户具有 JS 功能,则 URL 将在 ajax 中更改形式像...从 (abc.com?var=xyx) 到 (abc#var=xyz) 所以我将制作传统版本以及基于 ajax 的版本...现在我已经意识到我将重新考虑的缺点谢谢..