How to index dynamic pages to google using html5 pushstate method?

旧巷老猫 提交于 2019-12-02 20:01:15

问题


I am building a fully jquery powered website, so i am loading all pages dynamically using ajax to achieve fancy transitions between pages and maximize user experience. Here is my javascript code:

$(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 function returns all data needed to build pages in the json format, then i initialize my custom plugin which builds the page using that json data.

All of that works perfectly fine as you can see on this LIVE EXAMPLE, including the browser history (back and forward). But here is my problem... When the page is fully loaded the main container remains empty when i look at the source of the page. Also its empty when i try to fetch the page as google bot and i am pretty sure that these two are related.

As you can see on this example with the pretty much same code like i have, the source is being changed when you click on the links and it changes the page content as well, but without reloading the page. My question is, what am I missing here and how to achieve the same effect? Am i missing some php code or what? I am struggling with this over the past few days, I've tried everything and i couldn't make it work.

Note: only home and project links are working for now...

Thanks a lot for all replies!


回答1:


pushState lets you change the local part of the URI when you update the page contents with Ajax.

For every URI you create that way, allow the server to build the same page without any dependency on JavaScript.

This will:

  • Give better performance when visitors enter the site by following a deep link
  • Allow the site to work without JavaScript (including for search engine robots)



回答2:


Complementing the @Quentin's answer, you need to identify in the PHP if the content is being loaded via ajax or not. If it isn't, you have to display the full content of the page being requested, including header, footer and the content of the page.



来源:https://stackoverflow.com/questions/13607482/how-to-index-dynamic-pages-to-google-using-html5-pushstate-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!