What is difference SEO differencence between:
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
The exclamation point, eliminates the case of an empty hash like
example.com/index.php# which would make the page scroll to the top.