What is difference SEO differencence between:

  1. /index.php#mystate
  2. /index.php#!mystate
  • 1
    The difference in what aspect? In SEO? Please be more precise.
    – Gumbo
    Aug 22, 2011 at 17:52

2 Answers 2


The fragment identifier (when dealing with the URI of an HTML document) is supposed to be used to link to specific parts of a page. It isn't sent to the server.

In the last few years it has been used as a hack to maintain state information in websites that make heavy use of Ajax.

The use of a fragment identifier starting with a ! character is a further hack on top of this to tell Google how to generate a real URI for indexing purposes.

The introduction of pushState eliminates the need for these hacks in modern browsers.

For browsers that don't support pushState some people take the approach of falling back to the hashbang hack, while others (such as GitHub) fall back to normal links (instead of using Ajax for major content changes in browsers that don't support pushState).

  • The "it isn't sent to the server" is often overlooked. That means no edge cdn/performance reverse proxy gets to see those fragments.
    – adamrights
    Mar 20, 2021 at 6:21

The exclamation point, eliminates the case of an empty hash like example.com/index.php# which would make the page scroll to the top.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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