Ускорение сайта или вред для SEO: отложенная загрузка метрик и ее влияние на показатель отказов

Решение написать пост было принято ввиду популяризации статей на тему ускорения сайтов на vc.ru и сотен комментариев под материалами в разделе SEO.

Во всех постах дублируются известные приемы оптимизации страниц сайтов вроде lazyload загрузки изображений, кеширования, GZIP и др., которые в "пузомерках" вроде Google Pagespeed Insights дают небольшой прирост, но на деле реально эффективны.

Для достижения вожделенной "зеленой зоны" (оценки 100/100 по тестам Pagespeed Insights), остается нерешенным вопрос долгой загрузки и блокировки страницы сторонними скриптами метрик (Google Analytics, Яндекс.Метрика, Facebook Pixel и другие).

Единственное предлагаемое решение - отложенная загрузка и выполнение данных скриптов. Но насколько такой подход оправдывает цель?

Более глубокого изучения данное решение не удостоилось, поэтому пришла мысль провести "коллективную дискуссию" - приглашаю вас в комментарии.

Вопрос достаточно емкий, и без небольшого бэкграунда не обойтись, поэтому разделим его на следующие тезисы (от общего к частному):

  1. цель оптимизации сайта (влияние скорости загрузки на SEO);
  2. объективность оценок сервисов Google Pagespeed Insights и подобных;
  3. отложенная инициализация метрик и показатель отказов.

Возможно, данный вопрос не настолько острый и важный, чтобы писать для него отдельный материал, но:

  • в комментариях тесно для изложения мыслей на этот счет;
  • интересно разобраться в вопросе основательно.

Простите за долгое предисловие, не планировал лонгрид. Это не гайд (инструкция), не кейс (разбор), а скорее ресёрч (исследование).

Зачем ускорять сайт, и как оценить результат?

Прежде чем приступать к любой работе - важно понимать, какую цель преследует данный манёвр. Простыми словами - зачем это нужно?

Смысл оптимизации скорости загрузки сайта заключается в следующем:

  1. улучшить опыт пользователя - сократить время ожидания загрузки страницы, и тем самым минимизировать показатель отказов;
  2. в следствии п.1. ожидать преференции от поисковых систем в выдаче (не только благодаря быстрой загрузке, но и улучшению ПФ - снижению показателя отказов).

В целом тезисы ясны, но что считать быстрой загрузкой? Да, необходимое время загрузки в 1-2 секунды, и красивый график с показателями отказов все видели.

Красивый график с показателями отказов https://backlinko.com/hub/seo/bounce-rate

НО! К сожалению, показатель скорости загрузки сайта зависит от множества факторов:

  • тип устройства и его мощность (ПК, планшет, смартфон);
  • заявленная скорость интернет соединения (провайдер);
  • фактическая скорость (загрузка канала, качество сигнала и т.п.).

Следовательно, говорить об абсолютной оптимизации и постоянной скорости загрузки не представляется возможным.

Однако, существуют популярные сервисы замера скорости загрузки сайта. Насколько в таком случае точна их оценка? Стоит ли гнаться за 100/100?

Проверка скорости загрузки сервисами

Такие инструменты как Google Pagespeed Insights (и другие, на базе Lighthouse), используют для своих тестов эмуляцию конкретных устройств, которые, по их мнению, подходят для этого.

Интересно было бы узнать, как проходит отбор таких устройств. Возможно, по усредненным техническим характеристикам, или по популярности распространения устройств, схожих по ТХ.

Интересно, что на сегодняшний день, в Lighthouse для тестирования скорости загрузки сайта используется устройство 2016 года выпуска - Motorola Moto G4 на базе процессора Snapdragon 617 от 2015 года.

При этом используется достаточно хорошее интернет соединение - 1,6Mbps/750Kbps - эквивалентный медленному 4G или быстрому 3G. Тестировали бы уже на EDGE. 🙃

Конечно, для гиков гаджеты - это все, и ориентироваться на работников сферы IT было бы не верным решением.

Но в эпоху, когда Apple наполняет рынок десятками моделей смартфонов, соревнуясь с Xiaomi, Samsung и Huawei у кого телефон более бюджетный, при средней комплектации, ориентироваться на Moto G4, кажется, тоже не совсем корректно.

Для получения реальных данных по мобильным устройствам, использующихся аудиторией вашего сайта, перейдите в Google Analytics - Аудитория - Мобильные устройства - Устройства.

Перечень моделей мобильных устройств пользователей сайта

Немного про железо

Проанализировав топ мобильных устройств своего сайта и, на основании технических данных этих устройств, сравним процессоры и их производительность с процессором Snapdragon 617, установленным в Moto G4, используемом в тестах Lighthouse.

Сравнение мощностей процессоров мобильных устройств посетителей с устройством эмулирующим загрузку в синтетических тестах Lighthouse.

Конечно, Snapdragon 625 не самый мощный процессор, но все-таки мощнее Snapdragon 617, (возможно, из-за обновленного техпроцесса 10 нм). Не претендую на ученую степень инженера микропроцессоров, поправьте в комментариях.

В любом случае, Redmi Note 4 (на Snapdragon 625) - одно из самых устаревших устройств в списке аналитики, а в синтетических тестах замедление еще больше.

Таким образом, фактическая проверка оптимизации сайта, содержащего "современные" скрипты отслеживания (последнее изменение было в конце 2017 года), которые предлагает сам Google, проводятся на устройстве выпущенном в начале 2016 года. (голосом Михалкова) Иронично! 🙃

Данное сравнение, относительно поверхностно, важно учитывать и другие параметры, но в целом использование такого устройства кажется немного устаревшим.

То есть синтетические тесты проводятся на очень устаревшем устройстве. Разумеется, есть не такие благополучные страны/города/районы/люди, и кто-то еще использует кнопочные аппараты, но ориентироваться на эту аудиторию странно, нет?

Отложенная загрузка метрик

Хватит же погружения в технически детали! Мы здесь, чтобы разобраться что делать и "как дальше с этим жить". Как достичь 100/100 по Pagespeed Insights?

Предлагаемое решение - отложить выполнение скриптов метрик для достижения эффекта быстрой загрузки, реализуемое следующим простым кодом:

document.addEventListener('DOMContentLoaded', () => { setTimeout(function(){ /* * Тут код отслеживания всех метрик, */ }, 3500); // время указано в мс = 0,001 секунды, изменить по вкусу });

Код можно модифицировать по-разному:

  • менять время задержки;
  • менять событие, по которому будет выполнятся код.

Сути это не меняет, но можно найти множество подобных решений (некоторые даже продаются). Бесплатно, без смс и регистрации можно почитать тут:

Как это работает: при загрузке страницы будут загружены и выполнены все стили и скрипты, кроме отложенных. Отложенные скрипты будут загружены и/или выполнены через какое-то время (например, 0.5-1 секунду) или по действию пользователя (при прокрутке страницы, например).

Используя данный код, скорость загрузки страницы безусловно повысится в PageSpeed Insights, поскольку скрипты не будут выполнятся сразу, но:

  • будет ли наша статистика такой же точной?
  • как следствие - не вырастет ли показатель отказов?
  • как следствие - не будет ли понижен ресурс в поисковой выдаче?

Можно уверенно сказать - часть посещений потеряется. Да, это могут быть незначительные визиты, до 1 секунды, боты и т.д. Но эти показатели тоже важны для поисковых систем.

Также, фактический объем скриптов не меняется, то есть нельзя сказать, что будет ускорена загрузка, поскольку код выполнится, но позже. Для сравнения, отложенная загрузка изображений позволяет загружать их по факту востребованности.

Отложенным вызовом можно снизить пиковую единовременную нагрузку на процессор, распределив выполнение кода, не более того.

Из поиска по запросам "lazyload google analitycs" можно найти один очень старый (2011 год), но от этого не менее информативный, пост на Stackoverflow:

Другой информации, относительно изменений показателя отказов ввиду отложенной инициализации скриптов метрик, не удалось найти, кроме пары статей про ускорение сайта и статей на малазийском.

Вывод и опрос

Работать над скоростью загрузки сайта нужно, поскольку она влияет на пользовательский опыт, что несомненно улучшит и поведенческие показатели, и как следствие, положительно скажется на позициях.

Однако, данный показатель немного переоценен, поскольку существуют более весомые факторы ранжирования, и ожидать значительного эффекта не стóит.

Синтетические тесты предоставляют инструмент для ориентира, не более того. Но не стóит создавать сайты на шаблонах за 200$ с десятками ненужных скриптов и стилей, слепленных на коленке.

Решение об оптимизации сайта до "зеленой зоны" - не всегда верное и выполнимое в текущих реалиях, все зависит от:

  • типа сайта и контента;
  • целевой аудитории.

Техника отложенной загрузки скриптов метрик, как решение с целью достичь 100 баллов, вызывает сомнения, поскольку в теории можно получить негативный эффект, и как следствие, в позициях тоже.

А что скажете вы, коллеги?

Влияет ли отложенная загрузка метрик на показатель отказов?
Влияет, критично. Показатель отказов важнее.
Влияет, не критично. Прирост скорости эффективнее.
Не влияет.
Показать результаты
Переголосовать
Проголосовать
0
130 комментариев
Написать комментарий...
Алексей из LOADING.express

Абсолютно согласен, что устройство и троттлинг у лайтхауса немного жестковаты, поэтому мы используем немного другую эмуляцию, процессор в 2 раза быстрее, чем у пейджспид, сеть примерно на том же уровне.

Точность метрик Аналитикс и Яндекса снижается, но мы откладываем её не на 3500 мс, как в статье, а на 200-600 мс. Спросите в чем тогда смысл? Смысл в том, чтобы дать время выполниться без соединений и работы с DOM другим нужным для FCP и LCP элементам, и поставить выполнение внешних скриптов в конец очереди. Хотя бы сместить их на несколько позиций.

Чаты и попапы смело можно на 5-10 секунд откладывать, чтобы дать время выполниться родным скриптам сайта, которые нужны для отрсовки родного содержимого и взаимодействия с ним.

Откуда вообще эта идея в отложке? Это не для того, чтобы синтетика не ловила эти скрипты, а в том, что реальные пользователи выполняют родные скрипты сайта раньше чем сторонние. Однако этот подход практически бесполезен, если внутренние js-скрипты выполняются 10 секунд и на странице инициалиируется 10 слайдеров, при помощи плагина к библиотеке с кучей зависимостей.

Поэтому первоначально обязательно нужно оптимизировать СВОЙ КОД. Переработать, переосмыслить и то, что нельзя оптимизировать — тоже нужно откладывать по времени, или по действию пользователя.

Например, зачем грузить видео ютуба в айфрейм и целый плеер, если не каждый пользователь нажмет на play. Откладываем до клика на изображение видео. Всё.

Вообще, все соединения лучше вести через свой домен и не устанавливать внешних соединений, потому что это едва ли не самая ресурсоемкая операция. Можно потратить ресурсы на установку соединения, а потом гораздо быстрее выкачать картинку в 1 мегабайт.

Задача как раз сделать быстрее отрисовку первого экрана, снизить нагрузку на основной поток, растянуть нагрузку по времени, тем самым избежать лонг-тасков и блокировки потока более 50 миллисекунд.

Ответить
Развернуть ветку
Алексей из LOADING.express

По внутренней оптимизации.

Иногда инициализация одного внутреннего слайдера может занимать 2-3 секунды, так как приходится ждать ответа от бакенда, или загружать 1-2 библиотеки и существенно изменить DOM, вызвав тем самым перерисовку несколько раз подряд.

Простое изменение порядка работы с DOM может существенно снизить время выполнения задачи.

Пример:

вместо того, чтобы вставлять в страницу 10 элементов, вставляем один, который уже содержит эти 10 элементов, что уже вызовет одну перерисовку, вместо 10. Лучше конечно вообще не менять DOM из js без ведома пользователя.

В крайнем случае добавлять, но не менять. Это позволит еще и контролировать CLS, так как все элементы будут стилизованы без js.

Изменения css-свойств также может вызывать перерисовку всего содержимого. Нужно быть аккуратнее и не менять свойства своим js скриптом после загрузки страницы, оставив это на момент взаимодействия с элементом.

Ответить
Развернуть ветку
Nikita Spivak
Автор

Изменения в HTML через JS это такой ад. Мне кажется уже все от этого ушли, разве нет? Или в темах еще есть?

Слайдеры добавляют пару div'ов (пагинация и стрелки) - не критично я думаю, а ajax подгрузка контента активируется при скролле или при нажатии на кнопку.

В общем в моем представлении такие сайты все-таки это последствие неверного подхода к разработке. Когда стили переопределяют на все элементы и т.д.

Ответить
Развернуть ветку
Алексей из LOADING.express

Никита, вы не поняли. Пару дивов делают полную перерисовку. В комментарии описано подробно про это. Вы не внимательно прочли.

А то что HTML менять через JS - стандартное дело вообще. Всюду, кругом так происходит. То что вы не видите этого - не значит что этого нет.

Ответить
Развернуть ветку
Nikita Spivak
Автор

Возможно, вы имеете ввиду перестроение DOM дерева? Когда добавляются элементы на страницу - происходит перестроение, а перерисовка (Cumulative Layout Shift) - когда слайдер сворачивает элементы в строку и меняется вид отображения.

То есть при инициализации слайдера происходит одно перестроение - добавление элементов управления. Тогда при инициализации нескольких слайдеров, по идее происходит N перестроений, где N - количество слайдеров на странице.

А перерисовка  - должна быть одна, когда все слайдеры на странице инициализируются и превращаются из блоков в столбец в слайдеры. (можно минимизировать перерисовку при помощи CSS).

Иногда инициализация одного внутреннего слайдера может занимать 2-3 секунды, так как приходится ждать ответа от бакенда, или загружать 1-2 библиотеки и существенно изменить DOM, вызвав тем самым перерисовку несколько раз подряд.

Почему при инициализации слайдера нужно ждать бэкенд? Слайдер (тот же slick, например) - JS, работает с DOM. Какие вы используете технологии?

А то что HTML менять через JS - стандартное дело вообще. Всюду, кругом так происходит. То что вы не видите этого - не значит что этого нет.

Не уверен. Подгрузка HTML в наших проектах, во всяком случае (мы же не говорим про бесконечную ленту Facebook или сервисы Yandex, а про обычные сайты), реализуется либо при инициализации слайдеров (или других библиотек для спец. блоков), либо при подгрузке контента через AJAX по действию (скролл/клик и т.д.). Анимации не должны контент подгружать, а только изменять классы (тоже на скролл).

Напоминаю, я сам разработчик, если мне нужно что-то увидеть - я найду :)

Ответить
Развернуть ветку
Алексей из LOADING.express

🤯🤯🤯

Ответить
Развернуть ветку
Nikita Spivak
Автор

Сложно расценить это как профессиональный ответ. Или я слишком углубился в тему?

Ответить
Развернуть ветку
Алексей из LOADING.express

слишком углубился в теорию
лечится часами практики
но в вашем случае не уверен)) 🤔 

Ответить
Развернуть ветку
Nikita Spivak
Автор

Ну правильно, у вас видимо другой подход

Ответить
Развернуть ветку
Алексей из LOADING.express

другой
мы практики
каждый день десятки сайтов приходит на анализ
а теоретикам место на форумах))

Ответить
Развернуть ветку
127 комментариев
Раскрывать всегда