pushState и SEO



многие люди говорят, используйте pushState, а не hashbang.



то, что я не понимаю, как бы Вы были дружественны к поисковой системе без использования hashbang?



предположительно ваше содержимое pushState генерируется клиентским кодом JavaScript.



сценарий таков:



Я example.com. Мой пользователь нажимает на ссылку:href="example.com/blog"



pushState захватывает щелчок, обновляет URL, захватывает файл JSON откуда-то и создает список записей блога в области содержимого.



С hashbangs, google знает, чтобы перейти к escaped_fragment URL, чтобы получить их статическое содержимое.



С помощью pushState Google просто ничего не видит, поскольку он не может использовать код JavaScript для загрузки JSON и последующего создания шаблона.



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



Так я получаю это право, pushState не является SEO дружественным для клиентских приложений вообще?

619   3  

3 ответов:

Как насчет использования мета-тега, который Google предлагает для тех, кто не хочет хэш-челки в своих URL-адресах: <meta name="fragment" content="!">

см. здесь для получения дополнительной информации: https://developers.google.com/webmasters/ajax-crawling/docs/getting-started

к сожалению, я не думаю, что NickC прояснил вопрос, который, как я думал, имел OP. Проблема просто в том, что мы не знаем, кому мы служим контент, если мы не используем хэш-бан. Pushstate не решает этого для нам. Мы не хотим, чтобы поисковые системы говорили конечным пользователям переходить на какой-то URL, который выплевывает неформатированный JSON. Вместо этого мы создаем URL-адреса (которые запускают другие вызовы на другие URL-адреса), которые извлекают данные через AJAX и представляют их пользователю так, как мы предпочитаем. Если пользователь не является человеком, то в качестве альтернативы мы можем использовать html-снимок, чтобы поисковые системы могли правильно направлять пользователей-людей на URL, по которому они ожидали бы найти запрошенные данные (и презентабельно). Но конечная задача заключается в том, как мы определяем тип пользователя? Да мы можем использовать .htaccess или что-то, чтобы переписать URL для поисковых ботов, которые мы обнаруживаем, но я не уверен, насколько это надежно и надежно в будущем. Возможно также, что Google может наказывать людей за такие вещи, но я не исследовал его полностью. Таким образом, комбинация (pushstate + Google meta tag) кажется вероятным решением.

и pushState плохо, если вам нужны поисковые системы, чтобы читать ваш контент?

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

вы говорите:

С hashbangs, Google знает, чтобы перейти к escaped_fragment URL, чтобы получить их статическое содержимое.

так в других слова,

  1. Google видит ссылку на example.com/#!/blog
  2. запросы Google example.com/?_escaped_fragment_=/blog
  3. вы вернуть снимок содержимого, которое пользователь должен видеть

как вы можете видеть, он уже полагается на сервер. если вы не обслуживаете снимок содержимого с сервера, то ваш сайт не индексируется должным образом.

так как же Google увидит что-нибудь с pushState?

С помощью pushState google просто ничего не видит, поскольку он не может использовать javascript для загрузки json и последующего создания шаблона.

на самом деле, Google будет видеть, что он может запросить в site.com/blog. URL-адрес по-прежнему указывает на ресурс на сервере, и клиенты по-прежнему подчиняются этому контракту. Конечно, для современных клиентов Javascript открыл новые возможности для извлечения и взаимодействия с контентом без использования страница обновить, но контракты такие же.

так что предполагаемая элегантность pushState Это то, что он обслуживает один и тот же контент для всех пользователей, старых и новых, JS-способных и нет, но новых пользователей получить расширенные возможности.

как вы получаете Google, чтобы увидеть ваш контент?

  1. подход Facebook-обслуживать тот же контент по URL site.com/blog что ваше клиентское приложение будет преобразовываться, когда вы нажимаете /blog на государство. (Facebook не использует pushState еще что я знаю, но они делают это с hashbangs)

  2. подход Twitter-перенаправление всех входящих URL-адресов на эквивалент hashbang. Другими словами, ссылка на "/блог" толкает /blog на государство. Но если он запрашивается напрямую, браузер заканчивается на #!/blog. (Для Googlebot это будет маршрут к _escaped_fragment_ как вы хотите. Для других клиентов, вы могли бы pushState вернуться к довольно URL).

так что вы теряете _escaped_fragment_ возможности pushState?

в нескольких разных комментариях вы сказали

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

идеальным решением для Google является либо создание сайтов JavaScript, либо реализация какого-либо способа узнать, что есть URL-адрес экранированного фрагмента даже для сайтов pushstate (роботы.txt?).

преимущества, о которых вы упомянули, не изолированы от _escaped_fragment_. Что он делает переписывание для вас и использует специально названный GET param-это действительно деталь реализации. В этом нет ничего особенного, что вы не могли бы сделать со стандартными URL - адресами-другими словами, переписать /blog до /?content=/blog С помощью mod_rewrite или эквивалент вашего сервера.

что делать, если вы не служите серверный контент вообще?

если вы не можете переписать URL и служить какой-то контент at /blog (или любое другое состояние, которое вы вставили в браузер), тогда ваш сервер действительно больше не соблюдает контракт HTTP.

это важно, потому что перезагрузка страницы (по какой-либо причине) будет тянуть контент по этому URL. (см. https://wiki.mozilla.org/Firefox_3.6/PushState_Security_Review - " view-source и reload будут извлекать содержание в новом URI, если он был нажат.")

дело не в том, что рисование пользовательских интерфейсов один раз на стороне клиента и загрузка контента через JS API-плохая цель, просто это не учитывается с помощью HTTP и URL-адресов, и это в основном не обратно совместимо.

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

так уж получилось, что у них есть также используется (в частности Facebook и Twitter), чтобы изменить историю на стороне сервера без обновления страницы. именно в этих случаях использования люди рекомендуют отказаться от hashbangs для pushState.

если вы визуализируете все содержимое на стороне клиента, вы должны подумайте о pushState как часть более удобного API истории, а не выход из использования hashbangs.

все интересные разговоры о pushState и #!, и я до сих пор не вижу, как pushState заменяет #!'s цель, как оригинальный плакат спрашивает.

наше решение, чтобы сделать наш 99% JavaScript на основе Ajax сайт / приложение SEOable использует #! конечно. Поскольку рендеринг клиента выполняется через HTML, JavaScript и PHP, мы используем следующую логику в загрузчике, управляемом нашей посадкой страницы. HTML-файлы полностью отделены от JavaScript и PHP, потому что мы хотим один и тот же HTML в обоих (по большей части). JavaScript и PHP делают в основном то же самое, но PHP-код менее сложен, поскольку JavaScript-это гораздо более богатый пользовательский опыт.

JavaScript использует jQuery для ввода в HTML контента, который он хочет. PHP использует PHPQuery для ввода в HTML контента, который он хочет-используя "почти" ту же логику, но гораздо проще, поскольку версия PHP будет использоваться только для отображения SEOable версии с SEOable ссылками и не будет взаимодействовать с такими, как JavaScript версия.

все три компонента, которые составляют страницу, страницу.НТМ, страница.JS и страница.php существует для всего, что использует экранированный фрагмент, чтобы знать, Следует ли загружать версию PHP вместо версии JavaScript. Версия PHP не должна существовать для не-SEOable контента (например, страницы, которые можно увидеть только после входа пользователя). Все очень просто.

Я все еще озадачен тем, как некоторые разработчики переднего плана уходят от разработки отличных сайтов (с богатством Google Docs) без использования серверных технологий в сочетании с браузерными... Если JavaScript даже не включен, то наше 99% решение JavaScript, конечно, ничего не будет делать без PHP на месте.

можно иметь хороший URL-адрес, чтобы приземлиться на PHP-страницу и перенаправить на версию JavaScript, если включен JavaScript, но это не очень приятно с точки зрения пользователя, поскольку пользователи являются более важной аудиторией.

на боковой ноте. Если вы делаете просто простой веб-сайт, который может функционировать без какого-либо JavaScript, тогда я вижу, что pushState полезен, если вы хотите постепенно улучшить свой пользовательский опыт из простого статически отображаемого контента во что-то лучшее, но если вы хотите дать своему пользователю лучший опыт от go get... скажем, ваша последняя игра, написанная на JavaScript или что-то вроде Google Docs, тогда ее использование для этого решения несколько ограничено, поскольку изящно отступать можно только до тех пор, пока пользователь опыт бывает болезненным по сравнению с видением сайта.

Comments

    Ничего не найдено.