如何在内容页面选项卡中实现Hashbang(AJAX)?

时间:2012-06-28 18:33:35

标签: php jquery ajax web-crawler hashbang

正如你们中的一些人所知,Google现在正在抓取AJAX。到目前为止,实现是优雅的,但至少它仍适用于Yahoo和Bing AFAIK。

上下文:我的网站由Wordpress&amp; HTML5。自定义帖子类型具有树类型的内容,其内容由AJAX驱动。我之前没有使用hashbangs(#!)直到完全理解如何实现它们的解决方案相当“危险”。每个链接作为HREF链接到* site.com / article-one /?tab = first_tab *,显示所选标签(<div>Content...</div>)的仅内容。像这样:

<a href="http://site.com/article-one/?tab=first_tab" data-tab="first_tab">This First Tab</a>

您可能会注意到,data-tab是JavaScript使用AJAX Get发送的值,它获取相关内容并在容器内呈现。另一方面,服务器获取变量并执行<?php get_template_part('tab-first-tab'); ?>来传递内容。

关于风险,好吧,我可以看到谷歌和其他搜索引擎将获取* http://site.com/article-one/?tab = first_tab *而不是 http://site.com / article-one / ,使用户访问该URL,而不是显示自动选择标签内容的主页。

现在的问题是避免这种情况的实施。

Hashbang:根据我的学习,我应该这样做。

  1. HREF应该变为site.com/article-one/#!first-tab
  2. JS应该提取href的“first-tab”并将其传递给$ _GET(仅仅是为了不使用“data-tab”)。
  3. JS应将网址更改为site.com/article-one/#!first-tab
  4. JS应检测网址是否为#!first-tab,并显示所选标签而非默认标签。
  5. 现在,对于服务器端实现,这里是我在树林里迷失的地方。

    1. Wordpress如何处理site.com/article-one/?_escaped_fragment_=first-tab
    2. 我是否需要更改.htaccess中的内容?
    3. HTML快照应该包含哪些内容?我的猜测是所有网站,但显示请求的标签,而不是仅显示内容。
    4. 我认为我可以将Wordpress在检测到_escaped_fragment_时处理的内容分开。如果要求,例如谷歌,它将显示所有内容加上所选内容,如果没有,这是因为AJAX正在请求它并且只显示内容。那应该是对的吗?

1 个答案:

答案 0 :(得分:2)

我要和第三人说话。

由于没有回应,我有一个很好的原因,你不应该这样做。是的,这也是推特抨击他们的原因:

http://danwebb.net/2011/5/28/it-is-about-the-hashbangs

您应该制作正常的URI,而不是做hashbang。例如,带有摘要选项卡的文章应该是“site.com/article/summary”,如果它是弹出的默认文件(或者它已经被请求),它也应该使用pushState()更改为该URI。

如果用户选择标签“exercise”,则当网站通过AJAX加载内容时,URL应该使用pushState()更改为“site.com/article/exercises”,同时您仍然将原始href保持为“ site.com/article/exercises”。如果没有JavaScript,用户仍应看到内容 - 不仅仅是内容,选择了标签的整个页面。

要使其工作,应该对.htaccess进行一些编辑以处理URL中的/ [tab]。