SlideShare a Scribd company logo
Сергей Мелашич
Agilie
Настройка SEO
для одностраничных WEB приложений на Angular
Сергей
Мелашич
web разработчик компании Agilie
github facebook linkedin gmail
SergeyMell Seroga.Mell Sergey Melashych sergey.mell@agilie.com
Постановка проблемы
Как одностраничное приложение работает для пользователя?
1. Пользователь заходит на http://domain.com/shop/3/images/8
2. Получает практически пустой index.html со ссылками на JS файлы
3. Браузер подгружает и исполняет JS
4. Роутер обрабатывает роут /shop/3/images/8
и передает управление контроллеру
5. Контроллер загружает необходимые данные
6. Рендерится вьюха
Постановка проблемы
Как одностраничное приложение работает для пользователя?
Постановка проблемы
Как одностраничное приложение работает для краулера?
1. Краулер заходит на http://domain.com/shop/3/images/8
2. Получает index.html со ссылками на JS файлы
3. И на этом все... Ну или почти все
Что же умеют современные краулеры?
GOOGLE BOT
1. Умеет исполнять JavaScript
2. Умеет выполнять AJAX запросы, хотя и с оговорками
YANDEX BOT
1. Только начал понимать JavaScript
Но ведь есть еще Bing, Baidu, Facebook, Twitter и многие другие…
Предварительная визуализация
Как это работает?
1. Добавляем мета тег <meta name="fragment" content="!">
2. По тегу краулер понимает, что это одностраничное приложение
3. Краулер перезапрашивает эту страницу по ссылке
../shop/3/images/8?_escaped_fragment_=
4. Ловим такой запрос на сервере и отдаем ему отрендеренный HTML
5. Краулер ассоциирует эту страницу с исходным URL
Сервисы
Для предварительной визуализации
PRERENDER.IO
BromBone
SEO4Ajax
RenderJS.io
SEO.js
www.brombone.com
www.seo4ajax.com
renderjs.io
getseojs.com
Преимущества Prerender.io
1. Открытый исходный код
2. Кэширует ранее запрошенные страницы
3. Умеет кэшировать «на лету»
4. Есть настройки ожидания загрузки страницы
Что нужно для настройки Prerender.io
1. Добавить <meta name="fragment" content="!">
в заголовок страницы
2. Отловить на сервере запросы с параметром ‘escaped_fragment’
Что нужно для настройки Prerender.io
3. Отловить на сервере другие запросы от ботов
Что нужно для настройки Prerender.io
4. Перенаправить эти запросы на prerender
А если сэкономить?
Делаем сами, используя PhantomJS
Поднимаем сервер
Делаем сами, используя PhantomJS
Рендерим страницу
Делаем сами, используя PhantomJS
Оптимизируем
1. Ускоряем загрузку за счет использования
кэширования на уровне nginx
2. Генерируем слепки страниц “по расписанию”
3. Отслеживаем окончание рендеринга по “флагу”
Share buttons
Share buttons
Twitter sharing
Отладчик репостов Twitter
https://cards-dev.twitter.com/validator
Facebook, Tumblr sharing
Отладчик репостов Facebook
https://developers.facebook.com/tools/debug/
Facebook, Tumblr sharing
GRAPH API EXPLORER
POST https://graph.facebook.com/v2.8?
scrape=true&id=sharing_url
Изоморфные приложения
Предпосылки перехода к изоморфизму
1. 14 октября 2015 Google объявил описанный метод предварительной
визуализации устаревшим и, хотя он поддерживается до сих пор,
нужно быть готовым к его отмене
2. Есть масса других поисковых систем, которые определяют значительную
часть трафика, но при это существенно отстают от Google в смысле
умения индексировать одностраничные приложения
3. Проблемы с производительностью одностраничных приложений
Инструменты
для создания изморфных приложений
Что позволяет Angular Universal?
1. Сгенерировать на сервере весь HTML и отдать его клиенту вместе с
усеченной версией Angular
2. Предварительно визуализировать запрашиваемые страницы и быстро
отдавать их, загружая основное приложение в фоне
3. Умеет запоминать все события, которые вызвал пользователь до
момента загрузки Angular и передать их ему впоследствии
Особенности Angular Universal
Синхронизируйте роуты на сервере и клиенте
Особенности Angular Universal
Не трогайте DOM
Особенности Angular Universal
Объектов window, document, navigator на сервере нет
Особенности Angular Universal
Используйте кэширование
Приложение запускает запросы XHR дважды - на сервере и
еще раз на стороне клиента. Поэтому необходимо
использовать кэширование, чтобы выполнить
запрос на сервере один раз и кэшировать
полученные данные для клиента.
Благодарю за внимание!
Не забудьте разбудить своих соседей
github facebook linkedin gmail
SergeyMell Seroga.Mell Sergey Melashych sergey.mell@agilie.com

More Related Content

What's hot (20)

PDF
"Посмотрим на Акку-Джаву" Дмитрий Мантула
Fwdays
 
PDF
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
ScrumTrek
 
PDF
"Доклад не про React", Антон Виноградов, MoscowJS 27
MoscowJS
 
PPTX
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ontico
 
PPTX
Redux и изоморфные приложения
John Wezel
 
PPTX
Docker + Selenium Webdriver в рамках Continuous Integration
SQALab
 
PDF
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Fwdays
 
PPTX
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
PPTX
Gradle. Новый уровень автоматизации для Android
SQALab
 
PDF
BDD girls Battle: Cucumber VS. JBehave
SQALab
 
PPTX
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
PPTX
Kubernetes
SQALab
 
PPTX
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest
 
ODP
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
lshevtsov
 
PDF
Иван Крутов - Автоматизация сборки Java-проекта
Yandex
 
PDF
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QAFest
 
PPTX
Docker + Selenium Webdriver в рамках Continuous Integration
COMAQA.BY
 
PPTX
Codeception + Docker + Robo и что из этого вышло
COMAQA.BY
 
PDF
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
MoscowJS
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
Fwdays
 
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
ScrumTrek
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
MoscowJS
 
Ловля сетями. Инструменты отладки сетевых запросов приложений / Дмитрий Рыбак...
Ontico
 
Redux и изоморфные приложения
John Wezel
 
Docker + Selenium Webdriver в рамках Continuous Integration
SQALab
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Fwdays
 
Cистемы автоматической сборки проектов (Полина Фоминых)
Кафедра высокопроизводительных компьютерных технологий ИМКН УрФУ
 
Gradle. Новый уровень автоматизации для Android
SQALab
 
BDD girls Battle: Cucumber VS. JBehave
SQALab
 
Дмитрий Лукьяненко: Первый фреймворк на Selenium + TestNG
DataArt
 
Kubernetes
SQALab
 
CodeFest 2012. Родионов А. — Тестирование Ruby (on Rails) приложений: стек, п...
CodeFest
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
lshevtsov
 
Иван Крутов - Автоматизация сборки Java-проекта
Yandex
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QAFest
 
Docker + Selenium Webdriver в рамках Continuous Integration
COMAQA.BY
 
Codeception + Docker + Robo и что из этого вышло
COMAQA.BY
 
Регрессионное тестирование на lenta.ru, Кондратенко Павел, Rambler&Co, Moscow...
MoscowJS
 

Similar to Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular" (20)

PPTX
Как быть с большими сайтами на Word press
vovasik
 
PPTX
Эволюция BackDoor.Flashback
hexminer
 
PPTX
Ошибки в разработке интернет-магазинов - Евгений Концевой
Леонид Гроховский
 
PPTX
Droidcon Moscow 2015. Google App Indexing. Тимур Ахметгареев - App in the air
Mail.ru Group
 
KEY
PhoneGap + Sencha
observleer
 
PDF
В offline и обратно
Den Ilin
 
PDF
Аудит Ugg-deshevle.net.ua
kostetskiy
 
PDF
Faq2 online-business-master
Елена Шевцова
 
PDF
MockServer-driven development
Testableapple
 
PPT
Рациональный подход в СЕО: высокая конкуренция, большие списки, мультирегиона...
Александр Алаев
 
PPT
Продвижение по низкочастотным запросам - теория и практика
web2win
 
PDF
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
PPTX
Быстрая и безболезненная разработка клиентской части веб-приложений
Yaroslav Tkachenko
 
PPTX
WebdriverIO + Puppeteer. Double gun – double fun
Alexandr Khotemskoy
 
PPTX
Эссе по теме браузеры
Maxim Moroz
 
PDF
Аудит сайта Copterfield.com.ua
kostetskiy
 
PDF
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
camp_drupal_ua
 
PDF
Неочевидные возможности ускорения работы сайта
Netpeak
 
PDF
Аудит сайта Shopelvorti
kostetskiy
 
PDF
Аудит сайта Mik.co.ua
kostetskiy
 
Как быть с большими сайтами на Word press
vovasik
 
Эволюция BackDoor.Flashback
hexminer
 
Ошибки в разработке интернет-магазинов - Евгений Концевой
Леонид Гроховский
 
Droidcon Moscow 2015. Google App Indexing. Тимур Ахметгареев - App in the air
Mail.ru Group
 
PhoneGap + Sencha
observleer
 
В offline и обратно
Den Ilin
 
Аудит Ugg-deshevle.net.ua
kostetskiy
 
Faq2 online-business-master
Елена Шевцова
 
MockServer-driven development
Testableapple
 
Рациональный подход в СЕО: высокая конкуренция, большие списки, мультирегиона...
Александр Алаев
 
Продвижение по низкочастотным запросам - теория и практика
web2win
 
Meet Magento Belarus 2015: Denis Bosak
Amasty
 
Быстрая и безболезненная разработка клиентской части веб-приложений
Yaroslav Tkachenko
 
WebdriverIO + Puppeteer. Double gun – double fun
Alexandr Khotemskoy
 
Эссе по теме браузеры
Maxim Moroz
 
Аудит сайта Copterfield.com.ua
kostetskiy
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
camp_drupal_ua
 
Неочевидные возможности ускорения работы сайта
Netpeak
 
Аудит сайта Shopelvorti
kostetskiy
 
Аудит сайта Mik.co.ua
kostetskiy
 
Ad

More from Fwdays (20)

PPTX
"Як ми переписали Сільпо на Angular", Євген Русаков
Fwdays
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
"Validation and Observability of AI Agents", Oleksandr Denisyuk
Fwdays
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PPTX
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
Fwdays
 
PPTX
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
Fwdays
 
PDF
"AI is already here. What will happen to your team (and your role) tomorrow?"...
Fwdays
 
PPTX
"Is it worth investing in AI in 2025?", Alexander Sharko
Fwdays
 
PDF
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
PDF
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
PDF
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
PDF
"Scaling in space and time with Temporal", Andriy Lupa .pdf
Fwdays
 
PPTX
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
Fwdays
 
PPTX
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
Fwdays
 
PPTX
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
PPTX
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Fwdays
 
PPTX
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
PPTX
"Confidential AI: zero trust concept", Hennadiy Karpov
Fwdays
 
PPTX
"Choosing Tensor Accelerators for Specific Tasks: Compute vs Memory Bound Mod...
Fwdays
 
"Як ми переписали Сільпо на Angular", Євген Русаков
Fwdays
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
"Validation and Observability of AI Agents", Oleksandr Denisyuk
Fwdays
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
"Co-Authoring with a Machine: What I Learned from Writing a Book on Generativ...
Fwdays
 
"Human-AI Collaboration Models for Better Decisions, Faster Workflows, and Cr...
Fwdays
 
"AI is already here. What will happen to your team (and your role) tomorrow?"...
Fwdays
 
"Is it worth investing in AI in 2025?", Alexander Sharko
Fwdays
 
''Taming Explosive Growth: Building Resilience in a Hyper-Scaled Financial Pl...
Fwdays
 
"Scaling in space and time with Temporal", Andriy Lupa.pdf
Fwdays
 
"Database isolation: how we deal with hundreds of direct connections to the d...
Fwdays
 
"Scaling in space and time with Temporal", Andriy Lupa .pdf
Fwdays
 
"Provisioning via DOT-Chain: from catering to drone marketplaces", Volodymyr ...
Fwdays
 
" Observability with Elasticsearch: Best Practices for High-Load Platform", A...
Fwdays
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
"Istio Ambient Mesh in production: our way from Sidecar to Sidecar-less",Hlib...
Fwdays
 
" How to survive with 1 billion vectors and not sell a kidney: our low-cost c...
Fwdays
 
"Confidential AI: zero trust concept", Hennadiy Karpov
Fwdays
 
"Choosing Tensor Accelerators for Specific Tasks: Compute vs Memory Bound Mod...
Fwdays
 
Ad

Сергей Мелашич "Настройка SEO для одностраничных web-приложений на Angular"