views:

788

answers:

3

I want to build an ajax site without sacrificing SEO. My question is: If I have link on my page like this:

   <a href="http://mysite.com/cats" id="cats">Cats</a>
   <a href="http://mysite.com/dogs" id="dogs">Dogs</a>

...when each link is clicked I would like to update the address bar with the corresponding hashtag. So, if "Cats" link is clicked the current location will be http://mysite.com/#cats and I can use this to show my ajax content. If javascript is off or user is search engine, they will go directly to /cats

A: 

You cannot set the window.location.href without reloading the page in javascript for security reasons.

From what I've seen some people are saying Google will index # urls but they will be not considered separate pages and I think that is not what you want. I also have very little experience with SEO.

BenMills
+3  A: 

You can change the location.hash property, it will change the current anchor identifier without navigating away form the page, for example you could:

<a href="http://mysite.com/cats" id="cats" class="ajaxLink">Cats</a>
<a href="http://mysite.com/dogs" id="dogs" class="ajaxLink">Dogs</a>

Then:

$('.ajaxLink').click(function (e) {
  location.hash = this.id; // get the clicked link id
  e.preventDefault(); // cancel navigation

  // get content with Ajax...
});​
CMS
WOW! I didn't know it was this easy. Now I can make all my future sites in ajax and still get my site crawled and indexed! :D
alooficha
Only one thing though, if the user bookmarks this URL or clicks to it from another site, id doesn't return the current hash. It returns empty. Is there a solution to this? How can I check for the hash onload as well as onclick?
alooficha
You just have to check the value of the `location.hash` property when the page loads, it will contain the identifier, including the `#` symbol, e.g.: `if (location.hash == '#dogs') { /*...*/ }`
CMS
That's it! Thanks.
alooficha
A: 

asdfasdfasdf asdf asdf asdfasdcfas dfa sdf

Test