Как следует реализовать Hashbang (AJAX) на вкладках страницы контента?
Как некоторые из вас могут знать, Google сейчас сканирует AJAX. Реализация, безусловно, является чем-то элегантным, но, по крайней мере, она применима к Yahoo и Bing AFAIK.
Контекст: мой сайт работает на Wordpress и HTML5. Пользовательский тип поста имеет древовидные типы контента, и их содержимое управляется AJAX. Решение, которое я пришел для того, чтобы не использовать hashbangs (#!), Пока полностью не понял, как их реализовать, довольно "рискованно". Каждая ссылка в виде HREF ссылается на *site.com/article-one/? Tab=first_tab*, которая показывает только содержимое выбранной вкладки (<div>Content...</div>
). Как это:
<a href="http://site.com/article-one/?tab=first_tab" data-tab="first_tab">This First Tab</a>
Как вы можете заметить, data-tab - это значение, которое JavaScript отправляет с помощью AJAX Get, которое получает связанный контент и отображает его внутри контейнера. С другой стороны, сервер получает переменную и делает <?php get_template_part('tab-first-tab'); ?>
доставить контент.
Что касается риска, я вижу, что Google и другие поисковые системы будут получать *http://site.com/article-one/? Tab = first_tab * вместо http://site.com/article-one/, заставить пользователей перейти по этому URL вместо того, чтобы показывать домашнюю страницу с автоматически выбранным содержимым вкладки.
Проблема сейчас заключается в реализации, чтобы избежать этого.
Хэшбанг: Из того, что я узнал, я должен сделать это.
- HREF должен стать
site.com/article-one/#!first-tab
- JS должен извлечь "первую вкладку" из href и передать ее в $_GET (просто ради того, чтобы не использовать "data-tab").
- JS должен изменить URL-адрес на
site.com/article-one/#!first-tab
- JS должен определить, имеет ли URL
#!first-tab
и показать выбранную вкладку вместо вкладки по умолчанию.
Теперь для реализации на стороне сервера, вот где я немного заблудился в лесу.
- Как Wordpress справится
site.com/article-one/?_escaped_fragment_=first-tab
? - Нужно ли что-то менять в.htaccess?
- Что должно иметь снимок HTML? Я предполагаю, что весь сайт, но с запрошенной вкладкой показывает, а не показывает только содержание.
Я думаю, что я могу отделить то, что Wordpress будет обрабатывать, когда он обнаружит _escaped_fragment_. Если запрашивается, как в Google, он покажет весь контент плюс выбранный контент, а если нет, то это потому, что AJAX запрашивает его, и покажет только контент. Это должно быть правильно?
1 ответ
Я собираюсь поговорить с третьим лицом.
Поскольку это не имеет ответов, у меня есть хороший, почему вы не должны делать это. Да, по той же причине, по которой Твиттер их ударил:
http://danwebb.net/2011/5/28/it-is-about-the-hashbangs
Вместо того, чтобы делать hashbangs, вы должны сделать нормальные URI. Например, статья со вкладкой "Сводка" должна быть "site.com/article/summary", и, если она появляется по умолчанию (или она уже запрошена), она также должна измениться на этот URI с помощью pushState().
Если пользователь выбирает вкладку "упражнения", URL-адрес должен измениться на "site.com/article/exercises" с помощью pushState (), пока сайт загружает контент через AJAX, и пока вы сохраняете исходную ссылку на "site.com" / статьи / упражнения". Без JavaScript пользователь все равно должен видеть контент - не только контент, но и всю страницу с выбранной вкладкой.
Чтобы это работало, нужно внести некоторые изменения в.htaccess для обработки /[tab] в URL.