如何使用html5 pushstate方法将动态页面索引到谷歌?

时间:2012-11-28 14:32:49

标签: javascript ajax pushstate google-index

我正在构建一个完全由jquery驱动的网站,因此我使用ajax动态加载所有页面,以实现页面之间的奇特转换并最大化用户体验。 这是我的javascript代码:

$(function() {

    var path = _.compact(location.pathname.split("/"));
    if(path.length<2){
        path = 'home' 
    }else{
        path = path[path.length-1];
    }
    activepage = path;

    $('.nav a').click(function(e) {
        href = $(this).attr("href");            
        loadContent(href);      
        // HISTORY.PUSHSTATE
        window.history.pushState('', 'New URL: '+href, href);   
        e.preventDefault();                     
    });

    // THIS EVENT MAKES SURE THAT THE BACK/FORWARD BUTTONS WORK AS WELL
    window.onpopstate = function(event) {
        var path = _.compact(location.pathname.split("/"));
        if(path.length<2){
            path = 'home' 
        }else{
            path = path[path.length-1];
        }           
        loadContent(path);
    };

});



function loadContent(url){  
        // USES JQUERY TO LOAD THE CONTENT
        var adresa = absurl + "ajax/get_content";       
        $.ajax({
          url: adresa,
          contentType: 'application/json',
          data: { url: url },
          success: function(data) {
            switch(url)
            {
                case "projects": $.projects({ data : data }); $.projects.init();
                break;
                case "home": $.homePage({ data : data }); $.homePage.init();
                break;
                default: console.log("nista");
            }
          }
        }); 
}

Ajax函数返回以json格式构建页面所需的所有数据,然后我初始化我的自定义插件,该插件使用该json数据构建页面。

正如您在LIVE EXAMPLE上看到的那样,所有这些都非常正常,包括浏览器历史记录(后退和前进)。 但这是我的问题...当页面完全加载时,当我查看页面的源时,主容器仍然是空的。当我尝试将页面作为谷歌机器人获取时,它也是空的,我很确定这两个是相关的。

正如您在this example上看到的那样,我的代码几乎完全相同,当您点击链接时,源代码也会被更改,它也会更改页面内容,但不会重新加载页面。 我的问题是,我在这里缺少什么以及如何达到同样的效果?我错过了一些PHP代码或什么?在过去的几天里,我正在努力解决这个问题,我已经尝试了一切,但我无法使其发挥作用。

注意:目前只有家庭和项目链接正在运作...

非常感谢所有回复!

2 个答案:

答案 0 :(得分:1)

pushState允许您在使用Ajax更新页面内容时更改URI的本地部分。

对于您以这种方式创建的每个URI,允许服务器构建相同的页面而不依赖于JavaScript。

这将:

  • 访问者通过深层链接进入网站时提供更好的效果
  • 允许网站在没有JavaScript的情况下工作(包括搜索引擎机器人)

答案 1 :(得分:0)

补充@ Quentin的答案,您需要在PHP中识别是否通过ajax加载内容。 如果不是,则必须显示所请求页面的完整内容,包括页眉,页脚和页面内容。