Для hashbang или нет hashbang? - PullRequest
       35

Для hashbang или нет hashbang?

28 голосов
/ 20 июля 2011

Я занимаюсь разработкой нового веб-сайта, и я хотел бы максимально использовать AJAX. По сути, я хочу, чтобы пользователи почти никогда не отходили от домашней страницы и чтобы все отображалось во всплывающих окнах, ползунках, разделах и т. Д.

Теперь наш существующий веб-сайт уже занимает довольно высокое место, поэтому я также хочу, чтобы Google был доволен. Я читаю Создание приложений AJAX для сканирования от Google и понимаю, что я должен предоставить такое же содержимое для сканера через _escaped_fragment_ .

Проблема
Я хочу разработать этот сайт, используя Umbraco , который уже предоставляет SEO-дружественные URL. т

Но проблема в том, что у меня нет простого способа реализации _escaped_fragment_ без взлома ядра Umbraco (по крайней мере, это мои знания) и использования решения (ответа), которое я разместил ниже также держать пользователей без Javascript счастливыми. Беспроигрышная ситуация? Кому ты рассказываешь! =) * * Тысяча двадцать-семь

Обновление
Вчера был ответ от другого пользователя (теперь удаленного), который предположил, что Google больше не использует метод _escaped_fragment_ , и предложил исключить его. Это правда? Будет ли Google запускать AJAX для просмотра контента?

Спасибо
Marko

Ответы [ 3 ]

11 голосов
/ 20 июля 2011

Я беру совет из @ комментария Даниэля Придена и публикую его вместо ответа.

Я подумал об этой проблеме и подумал - почему бы не создать веб-сайт старомодным образом, с реальными страницами и всем остальным, а затем выполнить следующие шаги.

  1. Перехватывайте все внутренние ссылки на домашней странице с помощью jQuery и добавляйте хеш (#) перед window.location.pathname, вызывая событие hashchange. (см. шаг 3)
  2. Добавьте перенаправление javascript на все страницы, кроме домашней, для перенаправления страниц обратно на домашнюю страницу, но добавьте window.location.pathname после хеша (#). Например, Google сканирует http://www.domain.com/about-us.aspx, но когда пользователь заходит на страницу, он перенаправляется на http://www.domain.com/#/about-us.aspx
  3. На домашней странице используйте jQuery BBQ или аналогичный плагин для прослушивания события hashchange, в том числе при загрузке страницы, чтобы можно было загружать динамический контент. Umbraco можно настроить для обслуживания частичного или полного содержимого страницы в зависимости от того, является ли запрос AJAX или нет.

Таким образом, пользователи без Javascript будут иметь полноценный (полу-красивый) веб-сайт, Google будет сканировать все страницы без каких-либо проблем, но пользователи с Javascript всегда будут оставаться на главной странице - и крутая концепция будет иметь веб-приложение, а не веб-сайт.

9 голосов
/ 24 июля 2011

Рассматривали ли вы также использование управления сеансами истории HTML5?

Таким образом, вам не нужно использовать хеши в новых браузерах и таким образом пользователь не заметитвещь.

Немного упрощенно, вы бы сделали что-то вроде этого:

РЕДАКТИРОВАТЬ: обновленный пример.

function route(path) {
    $.get(path, function(data) {
        //parse data
    });
}

if (typeof history.pushState !== 'undefined') 
{
    $(window).bind('popstate', function(e)
    {
        route(window.location.pathname);
    });
    $('a').click(function(event) {
        event.preventDefault();
        history.pushState({},'',this.href);
    });
} else {
    $(window).bind('hashchange', function(e)
    {
        route(window.location.hash);
    });
    $('a').click(function(event) {
        event.preventDefault();
        $(this).attr('href', '/#'+$(this).attr('href'));
    });
}
0 голосов
/ 27 июля 2011

Используйте jQuery BBQ и используйте функцию js вверху ваших страниц, чтобы проверить, есть ли действительный хеш, если это так, перенаправьте на страницу.

...