【问题标题】:Google's shebang #! syntax for ajax crawling not resulting in crawled pages谷歌的shebang#! ajax 爬取的语法不会导致页面被爬取
【发布时间】:2014-12-16 21:52:44
【问题描述】:

我有一个实施了 Google 的 shebang '#!' 的网站ajax 抓取的语法。

系统的双方都已按照https://developers.google.com/webmasters/ajax-crawling/docs/specification 中的讨论实现

换句话说,Ajax 创建页面的 URL,例如:http://avianguitars.ca/configurator/#!S 映射到静态 HTML 版本,缓存在服务器端 http://avianguitars.ca/configurator/?_escaped_fragment_=S

Google 应该会看到 #!语法,爬取 _escaped_fragment_ 版本,并使用原始http://avianguitars.ca/configurator/#!S URL 将其显示在 Google 上。

我还在网站的站点地图中添加了http://avianguitars.ca/configurator/#!S 格式的 URL,该站点地图是通过 Google 的开发人员工具提交的,但是 !# URL 似乎都被忽略了,并且仍然没有被编入索引。

“shebanged”网址的另一个示例是 http://avianguitars.ca/configurator/#!action=showline&lineid=46,它映射到 http://avianguitars.ca/configurator/?_escaped_fragment_=action%3Dshowline%26lineid%3D46

通过站点地图提交的所有其他(非 ajax)URL 都被接受,我认为一般抓取现在也会拾取这些 URL。

有什么明显的我遗漏的东西阻止了链接被索引吗?

【问题讨论】:

  • 这里的配置器是什么?它是文件夹的路径吗?当我在访问您的网站后得到它时,它类似于告诉您的 index.php 加载哪些内容的操作,在这种情况下这是一个问题。

标签: javascript php ajax url google-ajax


【解决方案1】:

是的,你错过了一些东西。您需要添加 <meta name="fragment" content="!" /> 以告知您的 shebang URL 使用了标识符片段。

这会告诉你更多关于谷歌的信息:https://developers.google.com/webmasters/ajax-crawling/docs/specification

【讨论】:

  • 我认为这是可选的 - 即仅当您不使用 #! 时才需要!片段:“应用程序必须选择加入 AJAX 爬虫方案以通知爬虫请求丑陋的 URL。应用程序可以选择加入 其中一个或同时使用以下两种:1. 在您网站的哈希中使用 #! 2. 在没有哈希片段的页面(例如你的主页)的HTML头部添加触发器:"
  • 请用这个测试它。 Facebook URL 调试器也需要它来为您提供信息,可在此处测试:developers.facebook.com/tools/debug - 有趣的是 google.com/webmasters/tools/googlebot-fetch 无法获取碎片路径,即使它在请求渲染时首先显示 JS 生成的内容,并且其次,所有页面都出现在站点搜索中(使用 site:$domain 搜索)。
  • 您好……这让我很困惑。 Facebook 的调试工具仍然拒绝尊重 #!语法并像 Google 一样抓取 escaped_fragment url。我尝试删除 og:url 元标记和所有打开的图形标记,因为我认为这可能是负责任的,但似乎不是。
  • 我刚刚在我制作的网站上进行了测试,FB 在我的测试中确实尊重该语法,所以我猜它可能也是其他的东西。
  • 谢谢...建议我需要用一些精简的代码进行测试,看看是什么弄乱了系统。感谢您的帮助。
【解决方案2】:

确保在使用 _escaped_fragment 参数请求页面时在您的 HEAD 中输出链接 rel=canonical 标记。

因此,当使用特殊参数请求您的页面时,请将其包含在您的输出中:

<link rel="canonical" href="http://avianguitars.ca/configurator/#!action=showline&lineid=46"/>

我有一个完全基于 hashbang 的网站,并且已完全编入索引(已提交 312 个 URL,已编入 309 个 URL)。我只是将您的网站与我的网站进行了比较,这似乎是唯一缺少的东西。我不确定这是否是您问题的解决方案,但我在您的 html 中没有看到它。我添加了这个标签,因为我在谷歌文档的某个地方读到它,但现在我似乎再也找不到它了......

另外,我的网站不包括这个:

<meta name="fragment" content="!" />

...但这并没有阻止它被索引。

此外,谷歌站点地图中的 url 应该使用 hashbang 语法,而不是 _escaped_fragment 语法。如果您仍然遇到问题,请尝试使用 google 网站管理员工具注册您的网站,看看那里是否报告了任何问题:

https://www.google.com/webmasters/tools/

【讨论】:

  • 这很棒,我也要去试试。不幸的是,赏金已过期,但是……我不知道,如果可行的话,我会努力解决的!
  • 别担心,如果我能提供帮助,我很高兴。让我知道是否确实如此(这会很奇怪,因为谷歌文档没有提到它)
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多