JS-шаблонизация на клиенте и доступность сайта для роботов: как лучше организовать?
Есть сайт, на котором хочется активно использовать подгрузку данных, шаблонизацию на клиентской стороне и backbone.js (или angular.js). Но какой-то контент придется показывать роботам. Как бы получше всё организовать?
Хочется избежать дублирования шаблонов. Хотя, для nojs-клиентов можно выводить контент в упрощенном шаблоне, видимо.
И хочется избежать дублирования данных. То есть, не загружать через json то, что уже загружено в виде html.
Какие подходы к решению этих проблем существуют? В какой стороне искать?
Можете использовать jinja2 в Django и совместимый с jinja2 шаблонизатор на клиенте, например, Nunjucks.
Есть небольшие различия, которые нужно будет учитывать.
Делайте скрипт что бы страница загружалась быстро и по основной массе страниц для ботов не потребуется ничего отдельного, они прочитают страницу сформированную JS. Проблема JS сайтов в том, что краулер внутри сайта не бегает, ссылки сформированные JS кодом не видит. Краулер бегает только по html коду. Другими словами под ботов вам нужно адаптировать только очень небольшую часть страниц.
У поисковиков два основных этапа индексации, это краулинг (боты) и индексация. На этапе краулинга JS не выполняется, на стадии индексации собранные краулером страницы JS исполняется. К краулер (сборщик страниц) на первой стадии не ходит внутри JS сайта, но собирает все страницы на которые есть ссылки извне или ссылки с html страниц.
Поэтому на этом этапе ему нужны "корневые", то есть html страницы с ссылками, что бы ходить по всем страницам сайта.
Например, для сайта визитки это может быть одна страница с главным меню в html, а все остальные можно делать на JS, а в итоге весь сайт нормально проиндексируется.
@aplic при нндексации вроде как внешние скрипты не подключаются, насколько я помню. Может за последний год в этом плане что-то изменилось, но вроде как отрабатывают только простенькие скрипты в теле страницы.
@aplic я к тому что не плохо бы привести пруф, при котором что-то сложное будет учитываться гуглом. В любом другом случае это будет кастыль не слабее чем иметь дублирование шаблонов для клиента и сервера.
Пруф я сам, ставлю эксперименты уже много месяцев. Хочу хоть бы пост написать, но пока руки не дошли. Ну и аналогичное описание где-то читал, но тоже без пруфа.
Этот костыль и проще и лучше и самое главное работает как надо.
Внешние скрипты работают при индексации. Как оно там у гугола и яндекса внутри неонка или как мне неизвестно, но отрабатывают библиотеки я тестировал на этом же сайте лежащие.
@alekciy, ну-ну. В Яндексе ясно написано: «HTML-версия каждой AJAX-страницы должна быть доступна по адресу, в котором сочетание «#!» заменено на параметр ”?_escaped_fragment_”». Гугл что-то мутит: «если вы хотите создать сайт, который смогут сканировать Google и другие поисковые системы, то ссылки на содержание лучше всего предоставлять на языке HTML».
Я использую html5 history API, так что с адресами нет проблем. Но мне приходится на один и тот же блок делать шаблон в django-templates и в js-templates. Вопрос в том, как бы без этого обойтись.
а никак. Как вариант использовать приблизительно схожие темплейты (например twig.js, он вроде как похож на то что вам нужно). Да и темплейты для сервера и клиента все же различаются частенько.