Перейти к содержанию
Acecore

Руководство по повышению качества сайта на Astro, продолжение - финальные настройки для 100 баллов по всем категориям PageSpeed Insights

by Gui
Содержание
Руководство по повышению качества сайта на Astro, продолжение - финальные настройки для 100 баллов по всем категориям PageSpeed Insights

Почему это важно

Почему 100 баллов по всем категориям PageSpeed остаются высоким уровнем

100 не означает, что на реальном сайте всё идеально, но показывает отсутствие серьёзных упущений в ключевых аудитах Lighthouse.

Измерение под slow 4G

Мобильная проверка выполняется под slow 4G и с замедлением CPU. Даже лёгкий статический сайт не получает 100 автоматически.

Максимум сразу в 4 категориях

Недостаточно оптимизировать только Performance. Accessibility, Best Practices и SEO тоже должны одновременно соответствовать максимуму.

Сторонние элементы пришлось переупорядочить

Нужно сократить внешние beacon и лишние зависимости, при этом сохранив действительно нужные элементы вроде GA4 и рекламы.

Диагностику нужно интерпретировать

Цель не в том, чтобы занулить все insights, а в том, чтобы понять, допустимы ли оставшиеся диагностические сигналы.

Введение

В предыдущем Руководстве по повышению качества сайта на Astro я собрал воедино крупный набор улучшений, применённых к обновлённому сайту Acecore. Эта статья является его прямым продолжением.

Эта статья закрывает небольшие задачи, которые остались после публикации предыдущего материала, и доводит сайт до состояния, где все четыре категории PageSpeed Insights показывают 100 и на мобильных, и на десктопе. Работа не ограничилась подгонкой баллов: также были выведены из первоначальной загрузки GA4 и поиск, упорядочены breadcrumbs и правила индексации в Search Console, стабилизирован рендеринг иконок и явно обозначено, где дальнейшая оптимизация уже не стоит усилий.

Результат: 100 баллов по всем категориям PageSpeed Insights

По состоянию на 29 марта 2026 года главная страница Acecore показывала следующие результаты.

СредаPerformanceAccessibilityBest PracticesSEO
Мобильные100100100100
Десктоп100100100100

Ниже собраны реальные скриншоты PageSpeed Insights и URL отчётов. На предыдущем этапе я считал, что «mobile 99 / всё остальное 100» — это реалистичный потолок. На этот раз за счёт удаления ненужных сторонних beacon и внимательного разбора смысла оставшихся диагностик удалось выйти на 100.

URL отчётов

Чтобы вместе со скриншотами оставить и доказательство, которое можно позже открыть заново, я также добавляю прямые URL отчётов, использованных в этом измерении.

Скриншоты замеров

Нажмите на изображение, чтобы сразу открыть соответствующий отчёт PageSpeed Insights.

Насколько значимы 100 баллов

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

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

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

Финальные доработки на пути к 100 баллам

1. Отключение Cloudflare Web Analytics и переупорядочивание ролей измерения

Cloudflare Web Analytics полезен как privacy-first и лёгкий RUM-инструмент, но на стороне Acecore GA4 уже был широко настроен для измерения кликов по CTA, поиска, контактных действий, генерации лидов и других событий.

После повторной оценки ролей я пришёл к выводу, что со стороны Cloudflare цена дальнейшего внедрения ненужного beacon в PageSpeed уже стала выше его полезности. Я отключил RUM в панели и подтвердил, что static.cloudflareinsights.com/beacon.min.js исчез из production HTML.

Однако это не означало отказ от измерения в целом. CTA, внешние ссылки, поиск и контактные конверсии всё ещё должны были измеряться, поэтому следующим шагом стало сохранение GA4 при изменении момента его загрузки.

2. Сохранить GA4, но убрать его из первоначальной загрузки

Ключевая развилка здесь была не только между «оставить GA4» и «убрать его», а между «оставить» и «загружать с самого начала».

На практике точка входа gtag остаётся доступной сразу, чтобы события могли приниматься, но реальный скрипт gtag/js переносится на requestIdleCallback и пользовательские взаимодействия. Дополнительно для разных типов страниц оставлены разные fallback-задержки, чтобы analytics всё равно в итоге загрузился даже без мгновенной активности пользователя.

Это позволило сохранить измерение CTA, внешних ссылок, поиска и контактов, не проталкивая выполнение стороннего скрипта в самую раннюю фазу рендера. Иначе говоря, 100 баллов были достигнуты не только за счёт удаления Cloudflare beacon, но и благодаря более умной загрузке GA4.

3. Перевести поиск и Pagefind на загрузку по требованию

Поиск — ещё одна функция, которая способна незаметно утяжелять первоначальную загрузку, даже если пользователь не открывает её сразу. Acecore использует Pagefind для полнотекстового поиска, и в этой итерации я применил ту же дисциплину: оставить функциональность, но перестать платить за неё авансом.

Теперь модальное окно поиска загружает pagefind-ui.js и соответствующий CSS только в момент реального открытия поиска. Promise кэшируется, чтобы избежать повторной загрузки, а горячие клавиши и открытие через query string продолжают работать как раньше.

Это полезно не только для оценки Lighthouse. Обычный первый рендер сайта тоже становится легче. Поиск остаётся на месте, но больше не лежит на критическом пути каждого просмотра страницы.

4. Разбор оставшихся диагностик PageSpeed

Даже после достижения 100 баллов в PageSpeed могут продолжать отображаться такие диагностические пункты, как Network dependency tree и render-blocking resources. Если воспринимать их как предупреждения, которые обязательно нужно полностью устранить, легко уйти в оптимизации с низкой отдачей.

Критическая цепочка в этом случае выглядела примерно так:

  1. /en/
  2. ClientRouter.js
  3. BaseLayout.css
  4. BaseLayout.js

Из этих элементов реально render-blocking оставался только BaseLayout.css. Однако его размер уже достаточно мал, а мобильные 100 баллов сохраняются, поэтому пока я классифицировал его как «оставшуюся, но допустимую диагностику». Само по себе чёткое формулирование этого решения стало важным результатом, потому что даёт явное правило остановки для будущей оптимизации.

5. Упорядочивание breadcrumbs и правил индексации в Search Console

После того как PageSpeed стабилизировался на 100, я ещё раз посмотрел на сайт уже со стороны поиска. И именно там оставалось реальное несоответствие: Search Console всё ещё показывал невалидные breadcrumbs, хотя FAQ-разметка уже была в порядке.

Чтобы это исправить, вывод BreadcrumbList на страницах-списках был переделан так, чтобы принимать явные breadcrumb-элементы, а не слишком свободно выводиться из URL. Одновременно была выровнена обработка завершающих слешей, чтобы canonical, hreflang и breadcrumb URL больше не расходились.

Также была явно определена роль индексации для страниц тегов, архивов, авторов и пагинации. Эти страницы полезны как навигация, но легко превращаются в тонкие или дублирующие цели индексации. Поэтому для них был выбран режим noindex, follow, а сами они исключены из sitemap. Это не обнуляет моментально все отчёты «обнаружена, но не индексирована», но означает, что желаемая политика индексации теперь прямо выражена в коде.

6. Унификация рендеринга иконок через общий SVG-компонент

Во время этой волны улучшений проект уже переходил от icon utility в UnoCSS к общему SVG-компоненту Icon. В процессе перехода динамические icon class, оставшиеся в ProcessFigure и StatBar, не были полностью убраны, из-за чего в некоторых статьях отображались только пустые кружки.

Я унифицировал рендеринг на стороне компонентов через Icon, а также добавил alias, который поглощает legacy-имя check-circle в circle-check.

Это дало три практических преимущества:

  • Иконки гораздо реже пропадают из-за пропущенного динамического class
  • Атрибуты доступности вроде aria-hidden можно унифицировать на стороне SVG
  • Эксплуатация становится стабильнее, потому что рендеринг больше не зависит от статического анализа UnoCSS

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

7. Что проверялось, но не было принято

После появления 100 баллов естественно хочется добить и все оставшиеся диагностики, пока на экране ничего не останется. Я сравнил несколько таких направлений, но не принял следующие.

  • Дробить BaseLayout.css ещё сильнее: диагностика могла бы выглядеть чуть чище, но мобильные 100 уже стабильны, а практическая выгода не оправдывала дополнительную сложность.
  • Считать целью само исчезновение отображения network dependency tree: видимая диагностика не равна автоматически реальной проблеме для пользователей.
  • Сокращать third-party ещё дальше, вплоть до GA4: страница, возможно, стала бы немного легче, но цена в виде потери важных бизнес-измерений оказалась бы выше.

Именно это сравнение оказалось важным. Финальная настройка была завершена не потому, что убрали всё возможное, а потому, что оставшиеся компромиссы теперь можно чётко и обоснованно объяснить.

Практические выводы из финальной настройки

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

Например, Cloudflare Web Analytics стоит убрать, если он остался только по инерции, тогда как GA4 нужно оставить, потому что он является ядром измерения бизнес-событий. Но если GA4 остаётся, это не означает, что он обязан сидеть в первоначальной загрузке. Намного разумнее сохранить измерение, но изменить момент загрузки скрипта.

Та же логика применима к поиску и SEO. Поиск должен остаться, но ему не обязательно входить в начальный payload. Страницы-списки остаются полезными для навигации, но не обязаны быть основными целями индексации. И network dependency tree сам по себе не означает провал — нужно смотреть внутрь и оценивать, разумна ли оставшаяся цепочка.

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

Если оптимизировать только ради балла, процесс быстро уходит слишком далеко. На этот раз удалось упорядочить не только сами исправления, но и границу, где имеет смысл остановиться. Поэтому можно сказать, что улучшения сайта Acecore на текущий момент дошли до завершённого состояния.

Итог

Как продолжение предыдущей статьи, финальная настройка закрыла следующие задачи:

  • Подтверждены 100 баллов по всем категориям PageSpeed Insights на мобильных и десктопе
  • Отключён Cloudflare Web Analytics, при этом GA4 сохранён, но переведён на отложенную загрузку
  • Поиск и Pagefind переведены на загрузку по требованию, что уменьшило начальную нагрузку
  • Разобраны оставшиеся сетевые диагностики и чётко определено, какие остаточные проблемы допустимы
  • Упорядочены breadcrumbs в Search Console и правила индексации для страниц-списков
  • Устранены проблемы пропадающих иконок за счёт унификации на общем SVG Icon
  • Отброшены дополнительные оптимизации с низкой отдачей, а разумная точка остановки стала явной

По крайней мере с точки зрения Lighthouse и PageSpeed Insights сайт Acecore уже доведён до уровня, на котором он может по праву претендовать на верхний эшелон скорости. При этом сам балл — не цель, а только результат. Дальше я продолжу поддерживать и эксплуатацию, и улучшения, чтобы это состояние не деградировало.

Этапы финальной настройки

Измерить

Проверить и PageSpeed Insights, и Search Console, чтобы отделить реальные проблемы от просто диагностических подсказок.

Упорядочить

Переоценить роль Cloudflare Web Analytics и определить, что именно должно остаться среди GA4, рекламы и поиска.

Отложить

Убрать GA4 и поиск на базе Pagefind из первоначальной загрузки и загружать их только тогда, когда они действительно нужны.

Исправить

Выстроить breadcrumbs, canonical, noindex, sitemap и рендеринг иконок в одну согласованную систему.

Решить

Сравнить дополнительное дробление CSS и более глубокое сокращение third-party, а затем отказаться от решений с низкой отдачей.

Что изменила финальная настройка

До

  • Мобильный результат уже был высоким, но beacon Cloudflare Web Analytics всё ещё присутствовал
  • GA4 и интерфейс поиска оставались слишком близко к начальному этапу загрузки, поэтому граница между нужными функциями и моментом их загрузки была неясной
  • Смысл оставшихся диагностик PageSpeed был не до конца понятен, и не было критерия, когда стоит остановиться
  • В некоторых статьях из-за оставшихся UnoCSS icon class могли отображаться пустые кружки
  • Search Console всё ещё показывал невалидные breadcrumbs и шум индексации на страницах-списках

После

  • Все четыре категории показывают 100 и на мобильных, и на десктопе
  • Cloudflare Web Analytics отключён, а GA4 сохранён, но переведён на отложенную загрузку
  • Поиск и Pagefind переведены на загрузку по требованию, что уменьшило начальную нагрузку
  • Рендеринг унифицирован через общий SVG Icon, а legacy-имена иконок поглощаются alias
  • Breadcrumb, noindex, sitemap и canonical выстроены в соответствии с требованиями Search Console
  • От дополнительных оптимизаций с низкой отдачей сознательно отказались, и точка остановки стала понятной
Что было доведено до конца
  • Выполнено: Cloudflare Web Analytics отключён, а внедрение beacon остановлено
  • Выполнено: GA4 сохранён, но переведён на отложенную загрузку через requestIdleCallback и пользовательские взаимодействия
  • Выполнено: Интерфейс поиска и ресурсы Pagefind убраны из первоначального пути загрузки
  • Выполнено: Подтверждены 100 баллов по всем категориям PageSpeed Insights на мобильных и десктопе
  • Выполнено: Разобрано дерево сетевых зависимостей и зафиксировано, что BaseLayout.css остаётся единственным крупным узким местом
  • Выполнено: Исправлены breadcrumb-ошибки в Search Console и выровнена обработка breadcrumb, canonical и завершающих слешей
  • Выполнено: Политика индексации для тегов, архивов, авторов и пагинации уточнена через noindex и исключение из sitemap
  • Выполнено: Динамические icon class в ProcessFigure и StatBar перенесены на общий компонент Icon
  • Выполнено: Добавлена совместимость через alias для старого имени check-circle
  • Выполнено: Были сравнены дальнейшее дробление CSS и дополнительное сокращение third-party, но эти варианты отвергнуты, потому что усложнение перевешивало выгоду
Часто задаваемые вопросы
Если сайт получил 100 в PageSpeed Insights, можно ли назвать его самым быстрым возможным сайтом?
Не в абсолютном смысле. PageSpeed Insights — это лабораторное измерение на базе Lighthouse, и оно не полностью отражает реальные сети пользователей, устройства и нагрузку на сервер. Тем не менее 100 баллов означают, что сайт находится в очень высоком качественном состоянии и почти не имеет пропусков в ключевых аудитах Lighthouse.
Почему дерево сетевых зависимостей или render-blocking CSS могут оставаться видимыми даже при 100 баллах?
Эти пункты не всегда означают проваленный аудит. Они могут отображаться и как диагностическая информация. В данном случае на критическом пути остался только BaseLayout.css, но мобильные 100 баллов по-прежнему сохраняются, поэтому текущий баланс затрат и пользы считается приемлемым.
Почему Cloudflare Web Analytics был отключён?
GA4 уже достаточно покрывал измерение событий вроде CTA, поиска и контактов, тогда как сторона Cloudflare в основном свелась к наблюдению за производительностью. В этот раз также был учтён эффект beacon на PageSpeed, поэтому система измерений была переупорядочена вокруг GA4.
Что именно было исправлено для Search Console?
Вывод BreadcrumbList был переделан так, чтобы страницы-списки публиковали явные breadcrumb-элементы с валидными item URL. Одновременно были выровнены завершающие слеши, canonical, noindex и sitemap, чтобы страницы тегов, архивов, авторов и пагинации получили более ясную роль в индексации.
Были ли оптимизации, которые проверялись, но не были приняты?
Да. Сравнивались, например, более глубокое дробление BaseLayout.css, доработка только ради исчезновения самого отображения network dependency tree и даже более сильное сокращение third-party вплоть до GA4. Но при уже стабильных мобильных 100 баллах такие варианты приносили больше сложности или потери измерений, чем реальной пользы, поэтому были отвергнуты.
G

Gui

Генеральный директор Acecore. Универсальный инженер, охватывающий разработку систем, веб-производство, управление инфраструктурой и IT-образование. Любит решать организационные и человеческие задачи с помощью технологий.

Разработка систем Веб-производство Управление инфраструктурой IT-образование

Хотите узнать больше о наших услугах?

Мы обеспечиваем комплексную поддержку: разработка систем, веб-дизайн, графический дизайн и IT-образование.

Похожие статьи

Поиск статей