Доступный для сканирования контент Ajax. SEO-оптимизация без хэшбанга. Мой путь в порядке?

Я собираюсь создать свое приложение на основе ajax, и мои URL-адреса будут примерно такими:

http://server.com/module/#function_name,param1,param2...etc

После ссылки на некоторые обсуждения предложения Google: hashbang (#!), мне нетрудно понять, что это было не лучшее решение. Причин несколько:

  • В любом случае, URL-адрес довольно уродлив.
  • Ужасно, если когда-нибудь Google (или некоторые другие поисковые системы) предложит лучшее решение, чем hashbang. Я должен сохранить свой уродливый URL-адрес с помощью hashbang или написать какой-нибудь js-код, чтобы ссылка на мою страницу оставалась живой.
  • Когда-нибудь pushState HTML5 станет популярным.

Для всего вышеперечисленного я решил сделать по-своему: мои навигационные ссылки будут такими:

<a href="http://server.com/module/for-crawler/function-name/param1/param2/...">
Some text </a>

И некоторый код jQuery позволит загружать содержимое ajax вместо смены страницы, как обычная ссылка:

$(function(){
    $('a').live('click',function(e){
        var realURL = translateURL( $(this).attr('href') )
        loadContent( realURL );
        e.prevetnDefault(); 
        return false;
    })
})
/* -- the function translateURL will turn url like :
..... http://server.com/module/for-crawler/function-name/param1/param2/...
Into:
..... http://server.com/module/#function-name/param1/param2/...
    That's the real url I think all ajaxers are used to dealing with
*/

Когда сканер читает мою страницу, он будет следовать URL-адресу в атрибуте «href», и я предоставлю ему статическую версию моей страницы без js только для чтения Google. Через несколько дней моя страница будет проиндексирована, и пользователь увидит мою страницу в результатах Google следующим образом:

http://server.com/module/for-crawler/function-name/param1/param2/...

Я снова собираюсь использовать js, чтобы перенаправить пользователя на мою обычную версию ajax, я имею в виду, на настоящий URL:

http://server.com/module/#function-name/param1/param2/...

Это лучший подход, о котором я могу думать в настоящее время. Посоветуйте пожалуйста: делать так или можно сделать лучше? Спасибо всем ребята!


person vantrung -cuncon    schedule 31.05.2012    source источник
comment
Когда поисковые системы просматривают ваш URL-адрес, они думают, что на вашем сайте есть несколько каталогов, и они могут не заходить слишком далеко. Должны ли поисковые системы вообще беспокоиться о ваших параметрах, не могут ли ваши URL быть похожими на /function-name?someparam&anotherparam   -  person Matthew Riches    schedule 31.05.2012
comment
@MatthewRiches: Мой URL-адрес предназначен только для демонстрации, это может быть косая черта / или что-то еще, чтобы разделить мои параметры.   -  person vantrung -cuncon    schedule 31.05.2012


Ответы (1)


В зависимости от вашей аудитории я бы предложил использовать HTML5 PushState в любом случае.

Если клиент не поддерживает HTML5 PushState, позвольте ему просто использовать ту же версию вашего приложения, что и сканеры. На мой взгляд, перезагрузка страницы не так плоха, как хешированный URL. Поскольку пользователи делятся URL-адресами, ваш хешированный URL-адрес становится доступным для других пользователей. Этот URL-адрес не будет работать, скажем, для предварительного просмотра ссылок Facebook или любого другого клиента, который не поддерживает JavaScript.

Вместо этого я бы использовал удобное для сканера приложение только в сочетании с HTML5 PushState. С PushState вы всегда будете предоставлять один URL-адрес, независимо от поддержки JavaScript вашим клиентом.

Во-первых, определите, поддерживается ли PushState:

function supports_history_api() { return !!(window.history && history.pushState); }

Тогда ваш click-handler будет выглядеть примерно так:

$('a').live('click',function(e){
  var url = $(this).attr('href');
  e.preventDefault();
  loadContent( url );
  history.pushState({"url":url}, $(this).attr('title'), url);
  return false;
})
person Andre Schweighofer    schedule 31.05.2012
comment
Я думаю, что пользователей, не использующих HTML5, гораздо больше, чем пользователей, не использующих JS. И я не хочу терять пользователей, не использующих HTML5, из-за скучного макета версии без js. По крайней мере, сейчас, когда pushState и HTML5 не получили широкого распространения. Кстати: Вы знаете, какой браузер поддерживает pushState в настоящее время? - person vantrung -cuncon; 01.06.2012