Update: This answer has been superseded by this article . It discusses issues with Hashbang (#!), Hashes (#) and the HTML5 History API (pushState, popState) and solutions.
As for the usability on your website, it does not matter, and you can use whatever you like.
As for search engine optimization, its presence and absence both provide different opportunities for reduction.
For example, Facebook uses! according to Google Proposal for building Ajax Crawlable apps . Adding! will tell google that it should listen to this ajax request and add this url to the search engine results. This is great for sites that have already implemented ajax, since all you have to do is add !.
The disadvantage of this is that it solves the problem just to make your ajax crawlable. It does not solve the problem:
- Saving URLs for Ajax and Non-Ajax Users. For instance. you can end up with www.facebook.com/profile.php?pid=123#!profile.php?pid=123
- Saving the website by non-Ajax users.
- Storing URLs is the same for Ajax and Non-Ajax users.
- Some very complicated server-side changes are required to shield and translate states for query strings.
- It is incompatible with the new HTML5 PopState functionality, which is designed to really solve these problems.
For sites that do not currently use ajax for everything, because of the above issues, it is much better NOT to use Google Proposal, as this is only a workaround for sites like facebook that were crazy and needed a desperate SEO solution. There are alternatives that solve more of these problems (and now available HTML5 PopState can solve all problems). One such alternative is jQuery Ajaxy (as seen on balupton.com ), which works by simply updating your site in the ajax application, while preserving the experience for rich and interactive Ajax-Enabled and continuing to work great for Ajax-Disabled users.
source share