你们有些人可能知道,Google 现在正在抓取 AJAX。到目前为止,该实现很优雅,但至少它仍然适用于 Yahoo 和 Bing AFAIK。
背景:我的网站由 Wordpress 和 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 发送的值,它获取相关内容并在容器内呈现。另一方面,服务器获取变量并执行 a<?php get_template_part('tab-first-tab'); ?>
来传递内容。
关于风险,好吧,我可以看到谷歌和其他搜索引擎将获取 *http://site.com/article-one/?tab=first_tab* 而不是http://site.com/article-one/,使用户访问该 URL,而不是显示带有自动选择的选项卡内容的主页。
现在的问题是避免这种情况的实施。
Hashbang:根据我所学到的,我应该这样做。
- HREF 应该成为
site.com/article-one/#!first-tab
- JS 应该提取 href 的“first-tab”并将其传递给 $_GET(只是为了不使用“data-tab”)。
- JS 应该将 URL 更改为
site.com/article-one/#!first-tab
- JS 应该检测 URL 是否有
#!first-tab
,并显示选定的选项卡而不是默认选项卡。
现在,对于服务器端的实现,我有点迷失在树林里。
- Wordpress 将如何处理
site.com/article-one/?_escaped_fragment_=first-tab
? - 我是否必须更改 .htaccess 中的某些内容?
- HTML 快照应该有什么?我的猜测是所有站点,但显示了请求的选项卡,而不是仅显示内容。
我认为我可以将 Wordpress 检测到 _escaped_fragment_ 时将处理的内容分开。如果被请求,就像谷歌一样,它将显示所有内容以及所选内容,如果不是,那是因为 AJAX 正在请求它并且只会显示内容。那应该是对的?