Є чи pushState
погано , якщо вам потрібно пошукові системи , щоб прочитати зміст?
Ні, мова pushState
йде про те , щоб виконати той самий загальний процес для hashbangs, але з більш красивими URL-адресами. Подумайте, що насправді відбувається, коли ви використовуєте hashbangs ...
Ти кажеш:
За допомогою hashbangs Google знає, що потрібно перейти до URL-адреси escaped_fragment, щоб отримати їх статичний вміст.
Іншими словами,
- 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 (robots.txt?).
Переваги, про які ви згадали, не відокремлені _escaped_fragment_
. Те, що він робить переписування за вас і використовує спеціально названий GET
параметр, насправді є деталлю реалізації. Там немає нічого особливого про це , що ви не могли б зробити зі стандартними URL , - іншими словами, переписати /blog
в /?content=/blog
на свій власний , використовуючи mod_rewrite або вашого сервера еквівалентні.
Що робити, якщо ви взагалі не обслуговуєте вміст на стороні сервера?
Якщо ви не можете переписати URL - адреси і служать свого роду змістом в /blog
(або якому б стані ви виштовхувати в браузері), то сервер не насправді більше не дотримується договору HTTP.
Це важливо, оскільки перезавантаження сторінки (з якоїсь причини) призведе до переміщення вмісту за цією URL-адресою. (Див. Https://wiki.mozilla.org/Firefox_3.6/PushState_Security_Review - "view-source і reload завантажуватимуть вміст у новому URI, якщо його було натиснуто.")
Справа не в тому, що малювати користувальницькі інтерфейси на стороні клієнта і завантажувати вміст за допомогою API JS - погана мета, це просто те, що це насправді не враховується за допомогою HTTP та URL-адрес, і це в основному не є зворотним.
На даний момент це саме те, для чого призначені hashbangs - для представлення різних станів сторінок, які переміщуються на клієнті, а не на сервері. Наприклад, перезавантаження завантажить той самий ресурс, який потім зможе прочитати, проаналізувати та обробити хеш-значення.
Буває так, що вони також використовувались (зокрема, Facebook та Twitter) для зміни історії на розташування на стороні сервера без оновлення сторінки. Саме в тих випадках використання люди рекомендують відмовитися від hashbangs для pushState.
Якщо ви робите весь вміст на стороні клієнта, вам слід думати про це pushState
як про частину більш зручного API історії, а не про вихід із використання hashbangs.