我已将哈希爆炸方法用于具有 SEO 的完全 ajax 驱动的应用程序。根据我的经验,我认为这对于网络浏览器和智能手机浏览器来说都是非常可靠的方法。
这是我的方法。为简化代码,我将使用 Jquery / Zepto 代码
当您需要加载不同的 ajax 页面时,只需使用 javascript 更改 URL 哈希即可。
window.location.hash = '#!page1';
然后会从 javascript 触发哈希更改事件
$(window).on('hashchange',loadPage);
使用 loadPage 函数处理该事件
var loadPage = function(e){
pageId = window.location.hash;
_gaq.push(['_trackPageview', '/'+pageId]); //For google analytics virtual page push
if(pageId == '#!page1'){
$.get('ajax/page1.php', function(response) {
$('#main').html(response);
});
}else if(pageId == '#!page2'){
$.get('ajax/page2.php', function(response) {
$('#main').html(response);
});
}
}
通过这种方式,您可以通过键入 URL 和使用链接来加载页面。
现在是 SEO 部分。谷歌和其他主要搜索引擎开发了一种爬取基于 ajax 的网站的方法。如果你使用 #!在您的网址中,谷歌将替换 #!部分与 '?_escaped_fragment_' 并会要求您提供内容。例如
www.yoursite.com/#!page1 将转换为 www.yoursite.com/?_escaped_fragment_=page1
您需要做的就是将 _escaped_fragment_ 捕获为 GET 参数。如果你使用 php,代码会是这样的
if (isset($_GET['_escaped_fragment_'])) {
$fragment = $_GET['_escaped_fragment_'];
if($fragment == 'page1')
echo include 'ajax/page1.php'; // or use readfile method
else if($fragment == 'page2')
echo include 'ajax/page2.php'; // or use readfile method
}
您还可以通过捕获_escaped_fragment_为每个页面单独设置html页面标题和描述
另外,您可以使用 #! 在社交媒体中分享网址!也是。它将在_escaped_fragment_的帮助下被解析为常规链接
我希望这种方法可以帮助您解决所有问题。