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
    Commented 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
    Commented 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 you have read our privacy policy.

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