AJAX and search engines – Do's and Don'ts

Apr 13, 2006

In the light of the immense popularity AJAX has received the last couple of months and the emerging tools like Atlas and AJAX.NET, I thought it was the right time to talk about the implications on search engine behaviour on AJAX enabled websites.

In this post I’ll split websites into two categories – the public and the protected. A public website is accessible to all people and does not require login of any kind. It’s the most common type of website out there. The protected website could be an intranet site or a password protected membership site. In other words, the search engines index the public sites and not the protected sites.

When developing a protected site, you can do just about anything without the concern of search engine ranking. When developing a public website, you do not have that kind of liberty. The public site has to be search engine friendly.

So, when AJAX enabling a public website you have to make sure to keep the search engines happy at all times. If they aren’t happy with your website, neither should you be.

That’s why I’ve made a quick little list of Do’s and Don’ts about AJAX enabling your public website without loosing the search engines in the process.

Do’s

Do use AJAX for user specific actions
Set cookies, track sessions and log actions as long as the content isn’t dependant of it. Search engines will have no trouble indexing your content.

Do use AJAX to save content
When a user enters information in a form field and hits the save button, you can use AJAX as much as you like. Search engines will never push the save button anyway and is therefore unaware of the use of AJAX.

Do use AJAX to do form field validation
When validating form fields, you can use AJAX to validate the input without disturbing the search engines. Search engines do not fill out forms so that won’t be a problem.

Do use AJAX to display status messages
Displaying status messages of any kind based on user actions, is no problem for search engines, because the do not execute the JavaScript needed anyway and status messages are not important content for search engines to index anyway.

Don’ts

Don’t use AJAX for displaying static text content
By static content I mean the main text content of a page and not simple information like the number of current active session or something like that. The main text content of a page is the single most important thing for search engines, so never use AJAX for this purpose.

Don’t use AJAX for paging a table or list
If the table is filled with numbers with no search engine relevancy, you can skip this point. If your table or list contains book reviews, chances are that you want them indexed correctly. If your paging is AJAX enabled, the search engines will only index the first page of the table.

Don’t use AJAX for navigational purposes
This is not AJAX specific, the same rule applies to simple JavaScript as well. Search engines don’t follow JavaScript links, so they will get stuck on the entry page and leaves again without indexing the rest of your site.

The list isn’t complete, but I think it covers the basics and will help you to avoid the biggest caveats.

* $4.95/month BlogEngine.net Hosting – Click Here!

Comments (1) -

 Jeroen Haan
Jeroen Haan
1/12/2007 6:41:39 PM #

Dear Mads,

I understand your point and a year ago I would have agreed with you a 100%.

But fortunately there is a solution and this solution is not about AJAX only.
It is a very simple solution suitable for all those javascript events.

Indeed search engines follow the href attribute of the anchor tag.

But you can supply both the href attribute filled with a valid URL and an event like onClick or onMouseOver, etc.

I agree it is more coding because you have to do the AJAX part and the "old fashioned" "URI" part with the variables in the URL.

It is also an advantage in case someone does not have javascript enabled or the behaviour is somehow broken. In this case the website will still be fully functioning.

The trick is to just supply a second peace of javascript in the event argument.
return false

Note that this website didn't even accept the save HTML entities so for an example please see my website www.haan.net and click some links to get the second row with nested links. These contain the trick.

It works like this;
After pulling the AJAX content the second part of the argument returns false and thus the href attribute will not be parsed (executed) anymore.
Maybe this effect can be achieved with void() as well. I did not test this since the "return false" works fine for me.

Of course I will appreciate any comments.

Cheers

Comments are closed

About the author

Mads Kristensen

Mads Kristensen
Program Manager at the Microsoft Web Platform team and founder of BlogEngine.NET.

More...

Month List

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer’s view in any way.