Хашбанг или не хэшбанг?

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

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

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

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

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

Спасибо
Марко


person Marko    schedule 20.07.2011    source источник
comment
Поскольку это написано, это больше похоже на сообщение в блоге. Вы должны взять часть решения и опубликовать ее как ответ. В качестве бонуса вы с большей вероятностью привлечете ответы других людей.   -  person Daniel Pryden    schedule 20.07.2011
comment
Спасибо @Daniel, я последовал вашему совету и опубликовал его как ответ.   -  person Marko    schedule 20.07.2011
comment
@Marko Я понимаю хэш, но какое отношение к нему имеет bang в контексте веб-сайтов ajaxy?   -  person Dale Forester    schedule 26.07.2011
comment
@Marko: Если вы хотите наградить zzzzBov наградой, я могу проголосовать за удаленный ответ, чтобы восстановить его (только один человек не может восстановить ответ).   -  person Oleg    schedule 29.07.2011
comment
Всем, кто рассматривает возможность внедрения хэш-бангов, обязательно сначала посмотрите это: danwebb.net/2011/5/28/it-is-about-the-hashbangs и это: blog.benward.me/post/3231388630. Если вы думаете о SEO-дружественных URL-адресах, вам не следует думать о хэш-бангах. hashbangs предназначены для приложений, а не для сайтов   -  person Colin Pickard    schedule 02.05.2012


Ответы (3)


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

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

  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 всегда останутся на главной странице — и классная концепция наличия Будет выполнено веб-приложение, а не веб-сайт.

person Marko    schedule 20.07.2011
comment
Это похоже на то, что я делаю на своем сайте. Обычные ссылки — это просто каталоги /directory/file1, но если пользователь переходит на этот, он перенаправляет на мой основной сайт с хэшем там (#/directory/file1). - person switz; 22.07.2011
comment
Это именно то, к чему я пришел и что придумал (я был очень удивлен, увидев, что люди на самом деле меняют URL-адреса, а не просто реагируют на событие щелчка и меняют хэш с помощью js). Единственная вещь, которую я не мог пройти, — это заставить работать URL-адреса, когда пользователь A делится ссылкой с фрагментом хэша с пользователем B без javascript. Это нишевый случай, но вы его рассматривали? Также первоначальная вспышка контента перед загрузкой фрагмента ajax всегда раздражает... - person Wesley Murch; 22.07.2011
comment
Свитц, Google нормально сканирует ваш сайт? @Wesley, пользовательский интерфейс был разработан таким образом, что домашняя страница ожидает хэш в URL-адресе, и в этом случае он затемняет пользовательский интерфейс и показывает полосу загрузки во время загрузки контента. У меня есть тестовый пример на моем локальном хосте, который работает довольно хорошо, но, к сожалению, я пока не могу его загрузить. - person Marko; 22.07.2011
comment
У меня сложилось впечатление, что Google будет наказывать дублированный контент — не уверен, что это решение будет считаться таковым. - person Soren; 29.07.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'));
    });
}
person Ewout Kleinsmann    schedule 24.07.2011
comment
Но таким образом пользователи не могут добавлять страницы на сайт в закладки, потому что URL-адрес никогда не изменится. - person Marko; 26.07.2011
comment
URL изменится. Об этом позаботится следующая строка: history.pushState({},'',this.href); - person Ewout Kleinsmann; 26.07.2011
comment
что происходит в старых браузерах? Есть ли скрипт, который заботится об этом кросс-браузере? - person Marko; 26.07.2011
comment
Фрагмент кода, который вы видите в моем ответе, проверяет поддержку управления историей HTML5. Если есть, используйте его, если нет, вернитесь к использованию хэштегов. - person Ewout Kleinsmann; 26.07.2011
comment
Мне очень нравится идея. Мне просто нужно выяснить, как реализовать необходимую мне функциональность ajax, используя оба метода. - person Marko; 26.07.2011
comment
@marko: посмотрите на мой обновленный пример для толчка в правильном направлении :-) - person Ewout Kleinsmann; 26.07.2011
comment
Спасибо за ответ, но насколько этот код полезен, он не совсем отвечает на мой вопрос. Я наградил вас наградой, потому что в противном случае она истечет и пропадет впустую :) - person Marko; 30.07.2011

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

person Darm    schedule 26.07.2011
comment
Я искал по всему Интернету соус jQuery BBQ. Я не мог найти это все же. Я слышу, это потрясающе. - person Evik James; 30.07.2011