Проект с нестандартной архитектурой. Как оптимизировать ajax сайт под SEO?

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

Использую технологию PJAX (загрузка по AJAX целых блоков + push state).

Сайт спроектирован таким образом, чтобы синхронный запрос (типа /controller/action?param1=value) не отличался от такого же асинхронного. Т.е. если выключить pjax на всём сайте - сайт должен работать, как работал. Ссылки не меняются и послушно отдают контент, загружая заново всю страницу со всем леяутом.

К примеру, пользователь кликает на главное меню - перегружаю блок меню и основной блок контента. Ссылки меню - обычные, как будто сайт асинхронный, но PJAX добавляет параметр _pjax=#some-block, сервер по этому ориентируется, нужно отдать только нужный блок, или весь сайт.

Настроил всё так, чтоб работало с ЧПУ. Настроил так, чтобы можно было указать зависимости блоков и перегружать сразу несколько (к примеру, при отправке комментария обновить форму, список комментов и блок оповещений).

Система работает в разы быстрее и оптимизированней, чем при синхронных запросах. По идее сайт может нормально индексироваться, т.к. ссылки такие, как у обычного синхронного сайта/блога. Но это только предположение.

Собственно в этом и вопрос. Правильно ли я предполагаю, что за счёт такого подхода получится сделать не только хороший, быстрый и удобный сайт для пользователя, но и не просесть в поисковых системах?

Нужно ли перегружать с асинхронным запросом мета-теги? Или боты будут ходить синхронно по ссылкам?
Будет ли поисковик воспринимать ссылки, которые в href="..." (они работают в синхронном режиме, по прямому запросу. В этом и фишка).
Или поисковик будет копать глубже - отследит события, повешенные на PJAX блок и воспримет ссылку не как /sefurl-ssilka, а как /sefurl-ssilka?_pjax=#some-block ?

Просто если поисковик не поймёт моих стараний, то тогда имеет смысл определиться - делать синхронный сайт и не морочить голову, или забить вообще на поисковик и сделать SPA. В общем то и то и другое уже делал и как то не интересно, хотелось бы поэкспериментировать с новым подходом, но не в ущерб своему проекту.

Очень мало инфы, все пишут что прикольная технология этот PJAX, но у всех кто пробует - куча проблем из-за него. И, очевидно, на каком то этапе забивают. Но это не решение проблемы. Кто работал с таким? Или может поделиться источниками инфы? Или может подсказать специфику работы поисковых движков в этом плане?
  • Вопрос задан
  • 476 просмотров
Пригласить эксперта
Ответы на вопрос 5
@sidni
Php Developer
А че гадать зарегистриуйтесь на google search console, там есть пункт просмотреть страницу как google bot введите туда свою pjax ссылку и посмотрите что выйдет (там будет два окна как видит пользователь и как видит бот)
Но мне кажется может возникнуть спорная ситуация... даже если бот без js перейдет по ссылке а пользователь останется на старой но сновым контентом, тогда могут не совпасть хедер разные метатеги какие нибудь изображения и гугл может посчитать что вы пытаетесь обмануть бота и отдаете разный контент пользователю и боту а в не редких случаях это бан. Правда проблема аяксовых сайтов уже лет 10 стоит может гугл относится к этому уже лояльней
Ответ написан
А что прикольного? Отдавать куски контента - это как минимум заморочки в будущем, когда решите дизайн поменять. Верстальщик у вас по коду будет лазать? Хотя это можно предусмотреть на ранней стадии, наплодив файлов в шаблонизаторе (ага, и не забывая их поддерживать). На фронте тоже потенциальные заморочки с отслеживанием событий, вдруг надо нажатие на кнопочки отслеживать, которые находятся внутри загруженного блока? Конструкции вида $('body').on('click', 'some-element-inside-loaded-block') работают медленнее, чем $('some-element').on('click'), плюс, я понятия не имею, как вы сможете в этом случае прикрутить адекватный фреймворк и заставить его работать. А если у вас плагин вида datatables в загружаемом куске кода нужно будет активировать или нечто, что будет сжирать память, если его не выгружать перед удалением html блоков? Вы в конечном итоге придете к тому, что кроме html вам придется еще и js отдавать с тем же pjax и на этом моменте поймете, что дико встряли. Хотя справедливости ради замечу, что ssr для js-фреймворков я на практике не использовал пока (нет надобности, так как фреймворки в моих задачах отвечали о сих пор за в принципе неиндексируемые страницы типа личных кабинетов) и там тоже не в два клика все делается, но из этих двух вариантов я бы предпочел про ssr почитать, чем внедрять pjax.
Ответ написан
ivankomolin
@ivankomolin
Если сайт нацелен и на пользователей и на seo, то именно таким он и должен быть - быстрым для пользователей, доступным для поисковых систем.
Реализовал подобную систему и считаю это единственная возможность не создавать тормоза у пользователя из-за требований seo-специалистов.
Но нужно понимать, что поисковые системы не стоят на месте и у них уже должен быть робот который умеет js. Поэтому главное правило, что в пределах одного урла и боту и браузеру с js должен отдаваться абсолютно одинаковый контент. Тогда проблем быть не должно.

Особенности, которые были выработаны в ходе разработки:
1. Перезагружать совсем уж мелкими кусками не стоит, т.к. это добавляет нагрузку на клиент в виде сложной логики. Чем проще js на клиенте тем лучше. В итоге от мелких кусков пришли к 2м кускам: Статическая часть и динамическая часть.
2. Html формировать на сервере. Самый удобный вариант для клиента.
3. Шаблон одной и той же части должен быть один как для бота так и для браузера с js. Легче поддерживать. А благодаря пункту 2 это становится проще простого.
Ответ написан
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
все пишут что прикольная технология этот PJAX

Классная. Вот только это не значит, что она предназначена для Вашей затеи. Ее задача, просто и однотипно грузить блоки. Это мега удобно при разработке админки например или отправке формы ajax-ом. Делать весь сайт (front) на нем не самая лучшая затея. Есть смысл взять какой-то js framework. Однако и сильно серьезных проблем Вы не получите, с точки зрения seo. Ведь если Вы все правильно сделали, то get запросы по ссылкам должны возвращать валидный html, а что еще боту надо для счастья?
Наверное pjax это первое решение такого плана, которое Вы встретили. Поэтому советую обратить внимание на другие js технологии. Так как pjax это скорее хак, чем технология.
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
Боишься параметра? Избавься от него. Через GET загружай все, через POST только часть. Или придумай какой-то иной способ определения запроса.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы