I have read many articles about how Google handles AJAX loaded content, and I am aware that Google is now supposed to index your page like any modern browser now. However, I am still seeing much of the content of my site not getting indexed.

I can't post a link to the site (client confidentiality) - but my situation is as follows: One section on my site has a grid of images - when clicked, further content is loaded via AJAX and displayed on page. This can be closed, and next item in the grid can be clicked to load further content.

Here is an example of the type of code I'm using. (This is an example and not the exact code but gives an idea). Note: I am binding the AJAX event to the a tag on load - and the tag does not have a href attribute (I'm not sure if this is important).

<div id="item 1" class="GridItem">
  <img  src="/img1.jpg" >         
  <h3>Section 1</h3>
  <a data-id="12345" class="showInfo"></a>
<div id="item 2" class="GridItem">
  <img  src="/img2.jpg" >         
  <h3>Section 2</h3>
  <a data-id="12346" class="showInfo"></a>
<div id="item 3" class="GridItem">
  <img  src="/img3.jpg" >         
  <h3>Section 3</h3>
  <a data-id="12347" class="showInfo"></a>
<div id="infoContainer"></div>

 $(document).ready(function () {
      $('.showInfo').unbind().on('click touchend', function (ev) {
            $("#infoContainer").load('/ajaxpage?id=' + $(this).attr('data-id'), function () {  


I want to avoid having all my content loaded on page and hidden - not only will this likely have a negative SEO impact (hidden content is not a good idea) - it would add a large load overhead.

  • You can't force Google to index content. There are very few websites that get all their content indexed. Google chooses which content to index and often chooses not to index many pages. See Why aren't search engines indexing my content? – Stephen Ostermiller Mar 12 '18 at 9:58
  • 2
    Google only indexes content that users can see when they load the page. When you change the content on the page you need to change the URL using pushState and provide Googlebot a link (with a href) to that content. – Stephen Ostermiller Mar 12 '18 at 10:02
  • So, if I had a different "#" in the URL for each panel that's open - and force this to load on page load - Google will index. Will it treat it all as one page, or index each one individually however? – mp3duck Mar 12 '18 at 13:45
  • I wouldn't use hash URLs. Google doesn't support the # in URLs very well. pushState allows you to use better supported normal looking URLs without a fragment identifier. Like hash URLs, the page isn't refreshed so users get the AJAX experience. – Stephen Ostermiller Mar 12 '18 at 14:07
  • @StephenOstermiller - So, with push state, I am getting a different URL, so if I'm not mistaken, Google treat each one as a separate page in the index? Would the same apply if I just changed the query string with push state? Ideally, I'd like all the content index one the single page? – mp3duck Mar 13 '18 at 8:52

While not ideal for your present situation, you theoretically shouldn't need to do anything very soon:


I would use 'fetch and render' in Google Search Console as a first step to solving your problem.

  • 2
    I wouldn't use hash bang crawling. This is already deprecated and Google is likely to fully drop support for it soon. – Stephen Ostermiller Mar 12 '18 at 14:09
  • I agree I wouldn't use hash-bang URLs either. Where did you get your information about 'Google is likely to fully drop support for it soon'? Google has confirmed as recently as December 2017 that they will render hash-bang URLs? – Sandy Lee Mar 12 '18 at 14:18
  • The article you link to says that they are dropping support for the escaped fragment crawling later this year. That will mean that they start treating hash bang URLs just like they treat hash (not bang) URLs now: poorly. – Stephen Ostermiller Mar 12 '18 at 15:16
  • Whether they treat hash-bang URLs badly or not in the future is anyone's guess. The point is while the spec. is deprecated and has been for a for a long time now, Google will crawl/render those URLs without a pre-rendered version of the page being supplied. My solution of using Fetch and Render within Search Console is correct. – Sandy Lee Mar 12 '18 at 16:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.