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 дружественным для клиентских приложений вообще?
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, чтобы получить их статическое содержимое.
так в других слова,
- Google видит ссылку на
example.com/#!/blog- запросы Google
example.com/?_escaped_fragment_=/blog- вы вернуть снимок содержимого, которое пользователь должен видеть
как вы можете видеть, он уже полагается на сервер. если вы не обслуживаете снимок содержимого с сервера, то ваш сайт не индексируется должным образом.
так как же Google увидит что-нибудь с pushState?
С помощью pushState google просто ничего не видит, поскольку он не может использовать javascript для загрузки json и последующего создания шаблона.
на самом деле, Google будет видеть, что он может запросить в
site.com/blog. URL-адрес по-прежнему указывает на ресурс на сервере, и клиенты по-прежнему подчиняются этому контракту. Конечно, для современных клиентов Javascript открыл новые возможности для извлечения и взаимодействия с контентом без использования страница обновить, но контракты такие же.так что предполагаемая элегантность
pushStateЭто то, что он обслуживает один и тот же контент для всех пользователей, старых и новых, JS-способных и нет, но новых пользователей получить расширенные возможности.как вы получаете Google, чтобы увидеть ваш контент?
подход Facebook-обслуживать тот же контент по URL
site.com/blogчто ваше клиентское приложение будет преобразовываться, когда вы нажимаете/blogна государство. (Facebook не используетpushStateеще что я знаю, но они делают это с hashbangs)подход Twitter-перенаправление всех входящих URL-адресов на эквивалент hashbang. Другими словами, ссылка на "/блог" толкает
/blogна государство. Но если он запрашивается напрямую, браузер заканчивается на#!/blog. (Для Googlebot это будет маршрут к_escaped_fragment_как вы хотите. Для других клиентов, вы могли быpushStateвернуться к довольно URL).так что вы теряете
_escaped_fragment_возможностиpushState?в нескольких разных комментариях вы сказали
экранированный фрагмент совершенно другой. Вы можете обслуживать чистый необработанный контент, кэшированный контент и не подвергаться нагрузке, как обычные страницы.
идеальным решением для Google является либо создание сайтов JavaScript, либо реализация какого-либо способа узнать, что есть URL-адрес экранированного фрагмента даже для сайтов pushstate (роботы.txt?).
преимущества, о которых вы упомянули, не изолированы от
_escaped_fragment_. Что он делает переписывание для вас и использует специально названныйGETparam-это действительно деталь реализации. В этом нет ничего особенного, что вы не могли бы сделать со стандартными 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