The intent is to make AJAX pages crawlable by e.g. Google.
Normally, everything behind a hash in a URL is irrelevant for a crawler and is not send to the server at all. In AJAX applications it used to be heavily used for "simulating" a real URL in the browsers address bar (people now typically use history.pushState
).
To come around the limitation of not being ale to execute the full JavaScript application, Google invented a protocol that basically states that if it encounters a URL containing a hashbang like
http://example.com/foo#!key=value
it can transform it to
http://example.com/foo?_escaped_fragment_=key=value
And send it to the server. The server then is expected to return a representation of the page as it would have been shown in the JavaScript app. In the end it is just a convention to make these apps crawlable.
For more information, see the documentation on the topic by Google.