Хеш-часть никогда не отправляется на URL-адрес, но обычной практикой является манипулирование хешем для ведения истории и создания закладок для приложений AJAX. Единственная проблема заключается в том, что при использовании хэша, чтобы избежать перезагрузки страницы, поисковые системы остаются позади.
Если у вас был сайт с некоторыми ссылками,
http://example.com/#home
http://example.com/#movies
http://example.com/#songs
Ваше AJAXy-приложение JavaScript видит #home
, #movies
и #songs
и знает, какие данные оно должно загружать с сервера, и все работает нормально.
Однако, когда поисковая система пытается открыть тот же URL-адрес, хэш отбрасывается и всегда отправляет их на http://example.com/
. В результате внутренние страницы вашего сайта - дома, фильмы и песни - никогда не индексируются, потому что до сих пор не было доступа к ним.
Google создает спецификацию сканирования AJAX или более, подобную контракту, который позволяет сайтам в полной мере использовать преимущества AJAX, при этом все еще получая выгоду от индексации поисковыми системами. Вы можете прочитать спецификацию, если хотите, но суть ее заключается в процессе перевода, когда все, что появляется после #!
, добавляется в качестве параметра строки запроса.
Так, если бы ваши AJAX-ссылки использовали #!
, тогда поисковая система перевела бы URL-адрес, например,
http://example.com/#!movies
до
http://example.com/?_escaped_fragment_=movies
Ваш сервер должен смотреть на этот параметр _escaped_fragment_
и отвечать так же, как ваш AJAX.
Обратите внимание, что в HTML5 History interface теперь предусмотрены методы для изменения пути к адресной строке без необходимости полагаться на фрагмент хеша, чтобы избежать перезагрузки страницы.
Использование методов pushState
и popState
history.pushState(null, "Movies page", "/movies");
Вы можете напрямую изменить URL-адрес на http://example.com/movies
, не вызывая обновления страницы. Поисковые системы могут продолжать использовать тот же URL, который вы использовали бы в этом случае.