Ускоряем работу сайта на этапе разработки и обгоняем конкурентов в поиске

Приветствую!

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

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

В основном идею качества и здоровья сайта продвигает в массы Google.

Web Vitals — это именно его инициатива. Подробно в WV я углубляться не буду, есть куча статей на эту тему, кому интересно позалипать на технические термины — добро пожаловать на web.dev.

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

Хотя в последнее время в Яндекс.Вебмастере появился блок с информацией о скорости сайта.

Как его вычисляет Яндекс, участвует ли это значение в формуле расчета ИКСа, и почему там именно 5 пунктов, никто пока не в курсе.

Факт остаётся фактом.

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

Готовь сани летом

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

На моём опыте распределение примерно следующее: 1 из 50 заказчиков думает о скорости работы будущего сайта и полной внутренней оптимизации до запуска проекта и, как следствие, ставит нужные задачи программистам.

Даже не то что думает, а вообще подозревает, что такой параметр как скорость может играть какую-то роль.

Ну, как говорится, успех не для всех. Так что ловите несложную инструкцию и как можно скорее внедряйте это в свой сайт.

Ускоряем работу сайта самостоятельно

  • Включаем сжатие статических объектов.

Уверен, что малый процент читателей запускает или будет запускать свой сайт на выделенном сервере с самописной CMS, админкой и логикой.

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

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

Ускоряем работу сайта на этапе разработки и обгоняем конкурентов в поиске

Это самый простой и быстрый вариант требующий 0 знаний в области разработки. Кстати, рекомендую ставить уровень сжатия 6, чтобы сильно не нагружать CPU вашего сервера.

Включаем сжатие через файл. htaccess.

Тут возможно два варианта, если сервер поддерживает mod_deflate, то код будет такой:

<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE text/javascript AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/x-font AddOutputFilterByType DEFLATE application/x-font-truetype AddOutputFilterByType DEFLATE application/x-font-ttf AddOutputFilterByType DEFLATE application/x-font-otf AddOutputFilterByType DEFLATE application/x-font-opentype AddOutputFilterByType DEFLATE application/vnd.ms-fontobject AddOutputFilterByType DEFLATE font/ttf AddOutputFilterByType DEFLATE font/otf AddOutputFilterByType DEFLATE font/opentype BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html </IfModule>

А если не поддерживает, то будем использовать mod_gzip:

<ifModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file \.(html?|txt|css|js|php|pl)$ mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_include mime ^text/.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* mod_gzip_item_exclude mime ^image/.* mod_gzip_item_include handler ^cgi-script$ </ifModule>

Чтобы проверить работает ли gzip-сжатие на вашем сайте, зайдите сюда www.giftofspeed.com/gzip-test/ и запустите тест.

  • Устранение CSS и JS, блокирующих отрисовку.

Многие думают, что залог зелёной зоны в PageSpeed Insights — это просто вес страницы. Типа, весит страница на сайте 50 мегабайт — плохо, весит 50 байт — жизнь удалась.

На самом деле всё не так. Общий вес документа напрямую не влияет на 100 баллов в тесте скорости. Вопрос в том, как быстро для пользователя будет отображен первый экран контента.

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

Так вот, некоторые CSS и JS могут серьёзно растягивать время до отображения контента страницы.

Тут возможны два варианта, в общем-то оба рабочие.

Оптимизации CSS и JS вручную на этапе разработки.

Все стили сайта размещаем сразу в теге Head без подключения через статические файлы.

Не используем внешние шрифты, типа Google Fonts. Всё это тормозит скорость отрисовки контента у конечных пользователей.

Если без каких-то внешних скриптов ваш сайт работать вообще не может, то все скрипты грузим асинхронно, пример:

<script async src="http://site.com/123.js"></script>

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

Все скрипты, которые работают корректно, объединяем и помещаем как можно ниже в коде сайта.

Подумайте, какие стили и скрипты можно загрузить позже, и реализуйте это.

Тут нам понадобятся атрибуты defer, async, тег script, и несколько часов работы.

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

<link rel="preload" href="123.js" as="script"> <link rel="preload" href="style.css" as="style">

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

Приоритеты загрузки в Google Chrome можете посмотреть в этой таблице docs.google.com/document/d/1bCDuq9H1ih9iNjgzyAL0gpwNFiEP4TZS-YLRp_RuMlc/

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

<link rel="prefetch" href="123.js" as="script"> <link rel="prefetch" href="style.css" as="style">

Если нужно заранее установить соединение с внешним сервисом, например Google Fonts, то используйте тег preconnect, пример:

<link rel= "preconnect" href="https://fonts.googleapis.com" />​

Не нужно злоупотреблять этим тегом, браузер пользователя может его проигнорировать, если уже установлено много соединений или недостаточно памяти на устройстве. Оптимально использовать предварительное подключение до 6 внешних ресурсов. Чем меньше, тем лучше.

Для ускорения резолвинга DNS и экономии до 120 мс используйте тег dns-prefetch, пример:

<link rel= "dns-prefetch" href="https://fonts.googleapis.com" />​

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

Обязательно добавляйте параметр display swap, даже если шрифты загружаются из внешнего источника, пример:

@font-face { font-family: "Open Sans Regular"; src: url("..."); font-display: swap; } или https://fonts.googleapis.com/css?family=Creepster&font-display=swap

Лучше всего скачать шрифты и подгружать их с своего сервера, всё это увеличивает скорость работы вашего сайта.

  • Минифицируйте CSS, JS и HTML.

Если вы заказчик, то тут многое зависит от прямоты рук разработчиков, их уровня пофигизма, и конкретики в техническом задании.

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

Проверить это очень просто. Нам понадобится браузер Google Chrome.

Давайте проверим, какой объём кода не используется на сайте vc.ru, но его загружает ваш браузер.

Кликаем правой кнопкой мыши на произвольное место страницы, нажимаем «Посмотреть код». Далее выбираем вкладку «Console», чуть ниже около слова «Console» видим три точки столбиком и нажимаем на них, в выпадающем меню нажимаем «Coverage».

Ускоряем работу сайта на этапе разработки и обгоняем конкурентов в поиске

В этой таблице нас интересуют файлы, у которых значение «Unused bytes» (Неиспользованные байты) просто зашкаливающее.

У некоторых файлов «Unused bytes» = 100%.

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

Более подробно про инструмент Coverage можно прочитать тут developers.google.com/web/tools/chrome-devtools/coverage

Минифицируем CSS и JS вручную.

Заходим сюда minifier.org, загружаем CSS или JS файлы, жмём кнопку, всё готово.

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

Минифицируем и объединяем CSS и JS через плагины.

Есть множество плагинов для популярных CMS и их вполне можно использовать. Работают сносно. Мусор в коде особо не генерируют и выполняют свои задачи.

Если плагин рушит работу всего сайта, то просто попробуйте другой. Такое бывает.

Годные плагины для Wordpress: WP Super Cache, W3 Total Cache, WP Fastest Cache, Hummingbird, LiteSpeed Cache, WP Rocket, Autoptimize.

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

Ускоряем работу сайта на этапе разработки и обгоняем конкурентов в поиске
  • Подключите CDN.

CDN — content delivery network или сеть доставки контента. Если простыми словами, то это сетка серверов по всему миру с специальным ПО, задача которого отдавать статический контент вашего сайта с самого ближайшего к пользователю сервера.

Пример: хостинг вашего сайта физически расположен в Москве, но сайтом пользуется множество пользователей, от Калининграда до Владивостока.

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

При отключенном CDN контент сайта всегда будет загружаться с сервера в Москве, что замедляет скорость загрузки у пользователей, которые живут за МКАДом.

Для зарубежных проектов лучше всего использовать Amazon CloudFront, Cloud CDN от Google, Windows Azure CDN и конечно же CloudFlare. Это одни из топовых поставщиков CDN.

Для проектов, которые ориентированы только на рунет, лучше всего использовать локальных поставщиков CDN, например G Core Labs, CDN Video, Akamai, Selectel, Leaseweb.

Немного дополнительных плюсов CDN.

  • Устойчивость к DDoS за счет распределённой архитектуры и высокой мощности серверов.
  • Уменьшение нагрузки на сервер хостинг-провайдера, на котором расположен сайт.
  • При кратковременной недоступности сервера хостинг-провайдера сайт будет доступен, так как копия страниц сайта расположена на CDN серверах.
  • Значительное улучшение SEO-метрик сайта в отдалённых регионах.

Стоимость CDN сервисов обычно зависит от объёмов трафика. Чем больше трафика собирает сайт, тем дороже будет стоить CDN.

Фиксированные тарифы как правило отсутствуют. Более подробный список провайдеров под свои задачи можно найти тут cdnfinder.com.

  • Настройте Lazy loading и сожмите все изображения.

Lazy loading — это асинхронная загрузка контента до того момента, когда это необходимо.

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

В некоторых CMS Lazy loading настроен по умолчанию, например в последнем обновлении Wordpress. Можно настроить плагинами, проблем не возникает. Если CMS самописная — всё индивидуально, нужно ставить задачу разработчику.

Используйте современный формат изображений webp.

Это формат сжатия изображений от Google. Разработан в 2010 году. Дело в том, что изображения в формате webp весят в несколько раз меньше, чем изображения других форматов. Иногда в несколько сотен раз меньше.

Всё это влияет на загрузку сайта и скорость работы. Этот формат поддерживается браузерами Google Chrome с версии 9, Opera с версии 11.10, Firefox с версии 65, Microsoft Edge.

Смартфоны на Android спокойно читают формат webp с версии 4.0. Поддержка webp в Safari на Mac и iOS будет доступна с версии 14, выход которой намечен на сентябрь 2020 года.

На данный момент поддержки webp в Safari нет и пользователям этих устройств нужно отдавать jpg или png изображения, а всем остальным webp.

Чтобы подружить большинство популярных браузеров с форматом webp нужно подключать библиотеки libwebpjs/libwebpas на JS и AS соответственно.

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

Если вы категорически не можете использовать формат webp в своём проекте, то максимально сожмите изображения без изменения формата.

Делать это можно своим софтом, готовыми плагинами, или вообще вручную.

Годные плагины как правило стоят денег, да ещё и по подписке. Для малых объемов будет достаточно этого сервиса compressor.io.

  • Настройте длительное время кеширования.

mod_expires — специальный модуль сервера Apache, позволяющий задать время, на которое будут кешироваться статические ресурсы в браузере пользователя.

Кэшируем всё, CSS, JS, шрифты, изображения, пример кода для файла. htaccess:

<IfModule mod_expires.c> ExpiresActive On AddType image/webp .webp # Images ExpiresByType image/jpeg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/webp "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType image/x-icon "access plus 1 year" # Video ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/mpeg "access plus 1 year" AddType application/vnd.ms-fontobject .eot AddType application/x-font-ttf .ttf AddType application/x-font-opentype .otf AddType application/x-font-woff .woff AddType application/x-font-woff2 .woff2 AddType image/svg+xml .svg # CSS, JavaScript ExpiresByType application/vnd.ms-fontobject "access plus 1 year" ExpiresByType application/x-font-ttf "access plus 1 year" ExpiresByType application/x-font-opentype "access plus 1 year" ExpiresByType image/svg+xml "access plus 1 year" ExpiresByType text/css "access plus 1 year" ExpiresByType application/x-font-woff "access plus 1 year" ExpiresByType application/x-font-woff2 "access plus 1 year" ExpiresByType text/javascript "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" # Others ExpiresByType application/pdf "access plus 1 year" ExpiresByType application/x-shockwave-flash "access plus 1 year" </IfModule>

Кешировать счетчики аналитики и пиксели соц. сетей не получится.

Некоторые умельцы научились это делать с Google Analytcis на стороне пользователей, но я вам этого не рекомендую.

access plus 1 year — означает, что элемент будет кеширован на стороне пользователя сроком на 1 год после первого посещения сайта. При повторном посещении сайт откроется мгновенно, так как большинство ресурсов уже будет в кеше браузера пользователя.

  • Заблокируйте доступ к сайту для роботов и парсеров.

Существует огромное количество сервисов для SEO/PPC аналитики и не только.

Например, Semrush, Ahrefs, web.archive.org, pr-cy.ru, WebSpy и множество других.

Они парсят и агрегируют огромное количество сайтов и ежедневно создают нагрузку на ваш сайт. Это большая проблема в интернет-магазинах на сотни тысяч и миллионы SKU, может возникать повышенная нагрузка на БД.

Для отсечения самых популярных ботов на уровне сервера можно настроить специальные правила.

mod_setenvif — модуль сервера Apache, с помощью которого мы можем настроить полный запрет доступа к сайту для любых роботов и парсеров.

Пример кода для. htaccess:

<IfModule mod_setenvif.c> <IfModule mod_headers.c> SetEnvIfNoCase User-Agent "^LinksMasterRoBot" bot SetEnvIfNoCase User-Agent "^LinkStats" bot SetEnvIfNoCase User-Agent "^CNCat" bot SetEnvIfNoCase User-Agent "^linkdexbot" bot SetEnvIfNoCase User-Agent "^meanpathbot" bot SetEnvIfNoCase User-Agent "^NetSeer" bot SetEnvIfNoCase User-Agent "^statdom.ru" bot SetEnvIfNoCase User-Agent "^StatOnlineRuBot" bot SetEnvIfNoCase User-Agent "^WebArtexBot" bot SetEnvIfNoCase User-Agent "^Web-Monitoring" bot SetEnvIfNoCase User-Agent "^Runet-Research-Crawler" bot SetEnvIfNoCase User-Agent "^pr-cy.ru" bot SetEnvIfNoCase User-Agent "^SeopultContentAnalyzer" bot SetEnvIfNoCase User-Agent "^Seopult" bot SetEnvIfNoCase User-Agent "^spbot" bot SetEnvIfNoCase User-Agent "^rogerbot" bot SetEnvIfNoCase User-Agent "^sitebot" bot SetEnvIfNoCase User-Agent "^dotbot" bot SetEnvIfNoCase User-Agent "^Linux" bot SetEnvIfNoCase User-Agent "^SemrushBot" bot SetEnvIfNoCase User-Agent "^SemrushBot-SA" bot SetEnvIfNoCase User-Agent "^SemrushBot-BA" bot SetEnvIfNoCase User-Agent "^SemrushBot-SI" bot SetEnvIfNoCase User-Agent "^SemrushBot-SWA" bot SetEnvIfNoCase User-Agent "^SemrushBot-CT" bot SetEnvIfNoCase User-Agent "^SemrushBot-BM" bot SetEnvIfNoCase User-Agent "^SemrushBot-SEOAB" bot SetEnvIfNoCase User-Agent "^MJ12bot" bot SetEnvIfNoCase User-Agent "^Vivaldi" bot SetEnvIfNoCase User-Agent "^AhrefsBot" bot SetEnvIfNoCase User-Agent "^ArchiveBot" bot SetEnvIfNoCase User-Agent "^archive.org_bot" bot SetEnvIfNoCase User-Agent "^ia_archiver" bot SetEnvIfNoCase User-Agent "^ia_archiver-web.archive.org" bot SetEnvIfNoCase User-Agent "AhrefsSiteAudit" bot SetEnvIfNoCase User-Agent "^PaleMoon" bot SetEnvIfNoCase User-Agent "^Pale Moon" bot SetEnvIfNoCase User-Agent "Sovetnik" bot SetEnvIfNoCase User-Agent "sovetnik" bot SetEnvIfNoCase User-Agent "80legs" bot SetEnvIfNoCase User-Agent "360Spider" bot SetEnvIfNoCase User-Agent "^8484 Boston Project" bot SetEnvIfNoCase User-Agent "Aboundex" bot SetEnvIfNoCase User-Agent "^Alexibot" bot SetEnvIfNoCase User-Agent "^asterias" bot SetEnvIfNoCase User-Agent "^attach" bot SetEnvIfNoCase User-Agent "^AIBOT" bot SetEnvIfNoCase User-Agent "^Accelerator" bot SetEnvIfNoCase User-Agent "^Ants" bot SetEnvIfNoCase User-Agent "^Ask Jeeves" bot SetEnvIfNoCase User-Agent "^Atomic_Email_Hunter" bot SetEnvIfNoCase User-Agent "^atSpider" bot SetEnvIfNoCase User-Agent "^autoemailspider" bot SetEnvIfNoCase User-Agent "archive.org_bot" bot SetEnvIfNoCase User-Agent "^a.pr-cy.ru" bot SetEnvIfNoCase User-Agent "^BackDoorBot" bot SetEnvIfNoCase User-Agent "^BackWeb" bot SetEnvIfNoCase User-Agent "Bandit" bot SetEnvIfNoCase User-Agent "^BatchFTP" bot SetEnvIfNoCase User-Agent "^Bigfoot" bot SetEnvIfNoCase User-Agent "^Black.Hole" bot SetEnvIfNoCase User-Agent "^BlackWidow" bot SetEnvIfNoCase User-Agent "^BlowFish" bot SetEnvIfNoCase User-Agent "^BotALot" bot SetEnvIfNoCase User-Agent "Buddy" bot SetEnvIfNoCase User-Agent "^BuiltBotTough" bot SetEnvIfNoCase User-Agent "^Bullseye" bot SetEnvIfNoCase User-Agent "^BunnySlippers" bot SetEnvIfNoCase User-Agent "^Baiduspider" bot SetEnvIfNoCase User-Agent "^Bot\ mailto:craftbot@yahoo.com" bot SetEnvIfNoCase User-Agent "^Buddy" bot SetEnvIfNoCase User-Agent "^bwh3_user_agent" bot SetEnvIfNoCase User-Agent "BLEXBot" bot SetEnvIfNoCase User-Agent "^Cegbfeieh" bot SetEnvIfNoCase User-Agent "^CheeseBot" bot SetEnvIfNoCase User-Agent "^CherryPicker" bot SetEnvIfNoCase User-Agent "^ChinaClaw" bot SetEnvIfNoCase User-Agent "Collector" bot SetEnvIfNoCase User-Agent "Copier" bot SetEnvIfNoCase User-Agent "^CopyRightCheck" bot SetEnvIfNoCase User-Agent "^cosmos" bot SetEnvIfNoCase User-Agent "^Crescent" bot SetEnvIfNoCase User-Agent "^Custo" bot SetEnvIfNoCase User-Agent "^Cogentbot" bot SetEnvIfNoCase User-Agent "^China" bot SetEnvIfNoCase User-Agent "^ContactBot" bot SetEnvIfNoCase User-Agent "^ContentSmartz" bot SetEnvIfNoCase User-Agent "^CCBot" bot SetEnvIfNoCase User-Agent "^Cluuz" bot SetEnvIfNoCase User-Agent "^DISCo" bot SetEnvIfNoCase User-Agent "^DIIbot" bot SetEnvIfNoCase User-Agent "^DittoSpyder" bot SetEnvIfNoCase User-Agent "^Download\ Demon" bot SetEnvIfNoCase User-Agent "^Download\ Devil" bot SetEnvIfNoCase User-Agent "^Download\ Wonder" bot SetEnvIfNoCase User-Agent "^dragonfly" bot SetEnvIfNoCase User-Agent "^Drip" bot SetEnvIfNoCase User-Agent "^DataCha0s" bot SetEnvIfNoCase User-Agent "^DBrowse" bot SetEnvIfNoCase User-Agent "^Demo Bot" bot SetEnvIfNoCase User-Agent "^Dolphin" bot SetEnvIfNoCase User-Agent "Download" bot SetEnvIfNoCase User-Agent "^DSurf15" bot SetEnvIfNoCase User-Agent "^eCatch" bot SetEnvIfNoCase User-Agent "^EasyDL" bot SetEnvIfNoCase User-Agent "^ebingbong" bot SetEnvIfNoCase User-Agent "^EirGrabber" bot SetEnvIfNoCase User-Agent "^EmailCollector" bot SetEnvIfNoCase User-Agent "^EmailSiphon" bot SetEnvIfNoCase User-Agent "^EmailWolf" bot SetEnvIfNoCase User-Agent "^EroCrawler" bot SetEnvIfNoCase User-Agent "^Exabot" bot SetEnvIfNoCase User-Agent "^Express\ WebPictures" bot SetEnvIfNoCase User-Agent "Extractor" bot SetEnvIfNoCase User-Agent "^EyeNetIE" bot SetEnvIfNoCase User-Agent "^EBrowse" bot SetEnvIfNoCase User-Agent "^Educate Search VxB" bot SetEnvIfNoCase User-Agent "EmailSpider" bot SetEnvIfNoCase User-Agent "^ESurf15" bot SetEnvIfNoCase User-Agent "ExtractorPro" bot SetEnvIfNoCase User-Agent "^Foobot" bot SetEnvIfNoCase User-Agent "^focusbot" bot SetEnvIfNoCase User-Agent "^flunky" bot SetEnvIfNoCase User-Agent "^FrontPage" bot SetEnvIfNoCase User-Agent "^FileHound" bot SetEnvIfNoCase User-Agent "^FlashGet" bot SetEnvIfNoCase User-Agent "^Flexum" bot SetEnvIfNoCase User-Agent "^Franklin Locator" bot SetEnvIfNoCase User-Agent "^FSurf15" bot SetEnvIfNoCase User-Agent "^Full Web Bot" bot SetEnvIfNoCase User-Agent "^Go-Ahead-Got-It" bot SetEnvIfNoCase User-Agent "^gotit" bot SetEnvIfNoCase User-Agent "^GrabNet" bot SetEnvIfNoCase User-Agent "^Grafula" bot SetEnvIfNoCase User-Agent "^GetRight" bot SetEnvIfNoCase User-Agent "^Gets" bot SetEnvIfNoCase User-Agent "^GetWeb!" bot SetEnvIfNoCase User-Agent "^Gigabot" bot SetEnvIfNoCase User-Agent "^Go!Zilla" bot SetEnvIfNoCase User-Agent "^GoZilla" bot SetEnvIfNoCase User-Agent "^Grab.*Site" bot SetEnvIfNoCase User-Agent "^Grabber" bot SetEnvIfNoCase User-Agent "^grub-client" bot SetEnvIfNoCase User-Agent "^gsa-crawler" bot SetEnvIfNoCase User-Agent "^Guestbook Auto Submitter" bot SetEnvIfNoCase User-Agent "^Gulliver" bot SetEnvIfNoCase User-Agent "^Guzzle" bot SetEnvIfNoCase User-Agent "^GuzzleHttp" bot SetEnvIfNoCase User-Agent "^Harvest" bot SetEnvIfNoCase User-Agent "^hloader" bot SetEnvIfNoCase User-Agent "^HMView" bot SetEnvIfNoCase User-Agent "^HTTrack" bot SetEnvIfNoCase User-Agent "^humanlinks" bot SetEnvIfNoCase User-Agent "HubSpot" bot SetEnvIfNoCase User-Agent "^IlseBot" bot SetEnvIfNoCase User-Agent "^Image\ Stripper" bot SetEnvIfNoCase User-Agent "^Image\ Sucker" bot SetEnvIfNoCase User-Agent "Indy\ Library" bot SetEnvIfNoCase User-Agent "^InfoNavibot" bot SetEnvIfNoCase User-Agent "^InfoTekies" bot SetEnvIfNoCase User-Agent "^Intelliseek" bot SetEnvIfNoCase User-Agent "^InterGET" bot SetEnvIfNoCase User-Agent "^Internet\ Ninja" bot SetEnvIfNoCase User-Agent "^Iria" bot SetEnvIfNoCase User-Agent "^IBrowse" bot SetEnvIfNoCase User-Agent "^Industry Program" bot SetEnvIfNoCase User-Agent "^inktomi\.com" bot SetEnvIfNoCase User-Agent "^Internet\ Ninja"" bot SetEnvIfNoCase User-Agent "^ISC Systems iRc Search" bot SetEnvIfNoCase User-Agent "^IUPUI Research" bot SetEnvIfNoCase User-Agent "^ia_archiver" bot SetEnvIfNoCase User-Agent "^Jakarta" bot SetEnvIfNoCase User-Agent "^JennyBot" bot SetEnvIfNoCase User-Agent "^JetCar" bot SetEnvIfNoCase User-Agent "^JOC" bot SetEnvIfNoCase User-Agent "^JustView" bot SetEnvIfNoCase User-Agent "^Jyxobot" bot SetEnvIfNoCase User-Agent "^Java" bot SetEnvIfNoCase User-Agent "^jetcar" bot SetEnvIfNoCase User-Agent "^Kenjin.Spider" bot SetEnvIfNoCase User-Agent "^Keyword.Density" bot SetEnvIfNoCase User-Agent "^larbin" bot SetEnvIfNoCase User-Agent "^LexiBot" bot SetEnvIfNoCase User-Agent "^lftp" bot SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bot SetEnvIfNoCase User-Agent "^likse" bot SetEnvIfNoCase User-Agent "^LinkextractorPro" bot SetEnvIfNoCase User-Agent "^LinkScan/8.1a.Unix" bot SetEnvIfNoCase User-Agent "^LNSpiderguy" bot SetEnvIfNoCase User-Agent "^LinkWalker" bot SetEnvIfNoCase User-Agent "^lwp-trivial" bot SetEnvIfNoCase User-Agent "^LWP::Simple" bot SetEnvIfNoCase User-Agent "^LARBIN-EXPERIMENTAL" bot SetEnvIfNoCase User-Agent "^leech" bot SetEnvIfNoCase User-Agent "^LeechFTP" bot SetEnvIfNoCase User-Agent "^LetsCrawl.com" bot SetEnvIfNoCase User-Agent "^libwww-perl" bot SetEnvIfNoCase User-Agent "^Lincoln State Web Browser" bot SetEnvIfNoCase User-Agent "^LMQueueBot" bot SetEnvIfNoCase User-Agent "^LinkpadBot" bot SetEnvIfNoCase User-Agent "^Magnet" bot SetEnvIfNoCase User-Agent "^MegaIndex.ru" bot SetEnvIfNoCase User-Agent "^Mag-Net" bot SetEnvIfNoCase User-Agent "^MarkWatch" bot SetEnvIfNoCase User-Agent "^Mass\ Downloader" bot SetEnvIfNoCase User-Agent "^Mata.Hari" bot SetEnvIfNoCase User-Agent "^Memo" bot SetEnvIfNoCase User-Agent "^Microsoft.URL" bot SetEnvIfNoCase User-Agent "^Microsoft URL Control" bot SetEnvIfNoCase User-Agent "^MIDown\ tool" bot SetEnvIfNoCase User-Agent "^MIIxpc" bot SetEnvIfNoCase User-Agent "^Mirror" bot SetEnvIfNoCase User-Agent "^Missigua\ Locator" bot SetEnvIfNoCase User-Agent "^Mister\ PiX" bot SetEnvIfNoCase User-Agent "^moget" bot SetEnvIfNoCase User-Agent "^Mac Finder" bot SetEnvIfNoCase User-Agent "^MFC Foundation Class Library" bot SetEnvIfNoCase User-Agent "^Missauga Loca" bot SetEnvIfNoCase User-Agent "^Missouri College Browse" bot SetEnvIfNoCase User-Agent "^Mizzu Labs" bot SetEnvIfNoCase User-Agent "^Mo College" bot SetEnvIfNoCase User-Agent "^MVAClient" bot SetEnvIfNoCase User-Agent "^MJ12bot" bot SetEnvIfNoCase User-Agent "^mfibot" bot SetEnvIfNoCase User-Agent "^NAMEPROTECT" bot SetEnvIfNoCase User-Agent "^Navroad" bot SetEnvIfNoCase User-Agent "^NearSite" bot SetEnvIfNoCase User-Agent "^NetAnts" bot SetEnvIfNoCase User-Agent "^Netcraft" bot SetEnvIfNoCase User-Agent "^NetMechanic" bot SetEnvIfNoCase User-Agent "^NetSpider" bot SetEnvIfNoCase User-Agent "^Net\ Vampire" bot SetEnvIfNoCase User-Agent "^NetZIP" bot SetEnvIfNoCase User-Agent "^NextGenSearchBot" bot SetEnvIfNoCase User-Agent "^NG" bot SetEnvIfNoCase User-Agent "^NICErsPRO" bot SetEnvIfNoCase User-Agent "^niki-bot" bot SetEnvIfNoCase User-Agent "^NimbleCrawler" bot SetEnvIfNoCase User-Agent "^Ninja" bot SetEnvIfNoCase User-Agent "^NPbot" bot SetEnvIfNoCase User-Agent "^nutch-1.4" bot SetEnvIfNoCase User-Agent "^NameOfAgent (CMS Spider)" bot SetEnvIfNoCase User-Agent "^NASA Search" bot SetEnvIfNoCase User-Agent "^Net\ Reaper" bot SetEnvIfNoCase User-Agent "^Ninja" bot SetEnvIfNoCase User-Agent "^Nsauditor" bot SetEnvIfNoCase User-Agent "^NetLyzer" bot SetEnvIfNoCase User-Agent "^Octopus" bot SetEnvIfNoCase User-Agent "^Offline\ Explorer" bot SetEnvIfNoCase User-Agent "^Offline\ Navigator" bot SetEnvIfNoCase User-Agent "^Offline" bot SetEnvIfNoCase User-Agent "^Openfind" bot SetEnvIfNoCase User-Agent "^OutfoxBot" bot SetEnvIfNoCase User-Agent "^PageGrabber" bot SetEnvIfNoCase User-Agent "^Papa\ Foto" bot SetEnvIfNoCase User-Agent "^pavuk" bot SetEnvIfNoCase User-Agent "^pcBrowser" bot SetEnvIfNoCase User-Agent "^PHP\ version\ tracker" bot SetEnvIfNoCase User-Agent "^Pockey" bot SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bot SetEnvIfNoCase User-Agent "^ProWebWalker" bot SetEnvIfNoCase User-Agent "^psbot" bot SetEnvIfNoCase User-Agent "^Pump" bot SetEnvIfNoCase User-Agent "^ParseMX" bot SetEnvIfNoCase User-Agent "^Page.*Saver" bot SetEnvIfNoCase User-Agent "^PBrowse" bot SetEnvIfNoCase User-Agent "^PEval" bot SetEnvIfNoCase User-Agent "^Pita" bot SetEnvIfNoCase User-Agent "^Poirot" bot SetEnvIfNoCase User-Agent "^Port Huron Labs" bot SetEnvIfNoCase User-Agent "^Production Bot" bot SetEnvIfNoCase User-Agent "^Program Shareware" bot SetEnvIfNoCase User-Agent "^PSurf15" bot SetEnvIfNoCase User-Agent "^psycheclone" bot SetEnvIfNoCase User-Agent "^QueryN.Metasearch" bot SetEnvIfNoCase User-Agent "^RealDownload" bot SetEnvIfNoCase User-Agent "Reaper" bot SetEnvIfNoCase User-Agent "Recorder" bot SetEnvIfNoCase User-Agent "^ReGet" bot SetEnvIfNoCase User-Agent "^RepoMonkey" bot SetEnvIfNoCase User-Agent "^RMA" bot SetEnvIfNoCase User-Agent "^RookeeBot" bot SetEnvIfNoCase User-Agent "^Readability" bot SetEnvIfNoCase User-Agent "^Reaper" bot SetEnvIfNoCase User-Agent "^RSurf15" bot SetEnvIfNoCase User-Agent "Siphon" bot SetEnvIfNoCase User-Agent "^SiteSnagger" bot SetEnvIfNoCase User-Agent "^SlySearch" bot SetEnvIfNoCase User-Agent "^SmartDownload" bot SetEnvIfNoCase User-Agent "^Snake" bot SetEnvIfNoCase User-Agent "^Snapbot" bot SetEnvIfNoCase User-Agent "^Snoopy" bot SetEnvIfNoCase User-Agent "^sogou" bot SetEnvIfNoCase User-Agent "^SpaceBison" bot SetEnvIfNoCase User-Agent "^SpankBot" bot SetEnvIfNoCase User-Agent "^spanner" bot SetEnvIfNoCase User-Agent "^Sqworm" bot SetEnvIfNoCase User-Agent "Stripper" bot SetEnvIfNoCase User-Agent "Sucker" bot SetEnvIfNoCase User-Agent "^SuperBot" bot SetEnvIfNoCase User-Agent "^SuperHTTP" bot SetEnvIfNoCase User-Agent "^Surfbot" bot SetEnvIfNoCase User-Agent "^suzuran" bot SetEnvIfNoCase User-Agent "^Szukacz/1.4" bot SetEnvIfNoCase User-Agent "^SeznamBot" bot SetEnvIfNoCase User-Agent "^Site-Shot" bot SetEnvIfNoCase User-Agent "^Slackbot-LinkExpanding" bot SetEnvIfNoCase User-Agent "^Scrapy" bot SetEnvIfNoCase User-Agent "^Spider/Bot" bot SetEnvIfNoCase User-Agent "^Scooter" bot SetEnvIfNoCase User-Agent "^searchbot admin@google.com" bot SetEnvIfNoCase User-Agent "^SEO search Crawler" bot SetEnvIfNoCase User-Agent "^SEOsearch" bot SetEnvIfNoCase User-Agent "^ShablastBot" bot SetEnvIfNoCase User-Agent "^Snagger" bot SetEnvIfNoCase User-Agent "^snap.com beta crawler" bot SetEnvIfNoCase User-Agent "^sogou develop spider" bot SetEnvIfNoCase User-Agent "^Sogou Orion spider" bot SetEnvIfNoCase User-Agent "^sogou spider" bot SetEnvIfNoCase User-Agent "^Sogou web spider" bot SetEnvIfNoCase User-Agent "^sohu agent" bot SetEnvIfNoCase User-Agent "^SSurf15" bot SetEnvIfNoCase User-Agent "^SafeSearch_microdata_crawler_" bot SetEnvIfNoCase User-Agent "^SafeDNSBot" bot SetEnvIfNoCase User-Agent "^SafeDNSBot_" bot SetEnvIfNoCase User-Agent "^tAkeOut" bot SetEnvIfNoCase User-Agent "^Teleport" bot SetEnvIfNoCase User-Agent "^Telesoft" bot SetEnvIfNoCase User-Agent "^TurnitinBot/1.5" bot SetEnvIfNoCase User-Agent "^The.Intraformant" bot SetEnvIfNoCase User-Agent "^TheNomad" bot SetEnvIfNoCase User-Agent "^TightTwatBot" bot SetEnvIfNoCase User-Agent "^Titan" bot SetEnvIfNoCase User-Agent "^True_bot" bot SetEnvIfNoCase User-Agent "^turingos" bot SetEnvIfNoCase User-Agent "^TurnitinBot" bot SetEnvIfNoCase User-Agent "^Teleport\ Pro" bot SetEnvIfNoCase User-Agent "^Triton" bot SetEnvIfNoCase User-Agent "^TSurf15" bot SetEnvIfNoCase User-Agent "^Twiceler" bot SetEnvIfNoCase User-Agent "^URLy.Warning" bot SetEnvIfNoCase User-Agent "^Under the Rainbow" bot SetEnvIfNoCase User-Agent "^Yo-yo" bot SetEnvIfNoCase User-Agent "^Yanga" bot SetEnvIfNoCase User-Agent "^Vacuum" bot SetEnvIfNoCase User-Agent "^VCI" bot SetEnvIfNoCase User-Agent "^VoidEYE" bot SetEnvIfNoCase User-Agent "^Virusdie_crawler" bot SetEnvIfNoCase User-Agent "^VadixBot" bot SetEnvIfNoCase User-Agent "^voyager" bot SetEnvIfNoCase User-Agent "^Web\ Image\ Collector" bot SetEnvIfNoCase User-Agent "^Web\ Sucker" bot SetEnvIfNoCase User-Agent "^WebAuto" bot SetEnvIfNoCase User-Agent "^WebBandit" bot SetEnvIfNoCase User-Agent "^Webclipping.com" bot SetEnvIfNoCase User-Agent "^WebCopier" bot SetEnvIfNoCase User-Agent "^WebEMailExtrac.*" bot SetEnvIfNoCase User-Agent "^WebEnhancer" bot SetEnvIfNoCase User-Agent "^WebFetch" bot SetEnvIfNoCase User-Agent "^WebGo\ IS" bot SetEnvIfNoCase User-Agent "^Web.Image.Collector" bot SetEnvIfNoCase User-Agent "^WebLeacher" bot SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bot SetEnvIfNoCase User-Agent "^WebReaper" bot SetEnvIfNoCase User-Agent "^WebSauger" bot SetEnvIfNoCase User-Agent "^Website\ eXtractor" bot SetEnvIfNoCase User-Agent "^Website\ Quester" bot SetEnvIfNoCase User-Agent "^Webster" bot SetEnvIfNoCase User-Agent "^WebStripper" bot SetEnvIfNoCase User-Agent "^WebWhacker" bot SetEnvIfNoCase User-Agent "^WebZIP" bot SetEnvIfNoCase User-Agent "Whacker" bot SetEnvIfNoCase User-Agent "^Widow" bot SetEnvIfNoCase User-Agent "^WISENutbot" bot SetEnvIfNoCase User-Agent "^WWWOFFLE" bot SetEnvIfNoCase User-Agent "^WWW-Collector-E" bot SetEnvIfNoCase User-Agent "^W3C-checklink" bot SetEnvIfNoCase User-Agent "^Weazel" bot SetEnvIfNoCase User-Agent "^Web.*Spy" bot SetEnvIfNoCase User-Agent "^WebAlta" bot SetEnvIfNoCase User-Agent "^WebCapture" bot SetEnvIfNoCase User-Agent "^WebMirror" bot SetEnvIfNoCase User-Agent "^WebRecorder" bot SetEnvIfNoCase User-Agent "^WebSpy" bot SetEnvIfNoCase User-Agent "^WebVulnCrawl.unknown" bot SetEnvIfNoCase User-Agent "^Wells Search" bot SetEnvIfNoCase User-Agent "^WEP Search" bot SetEnvIfNoCase User-Agent "^www\.asona\.org" bot SetEnvIfNoCase User-Agent "^Wget" bot SetEnvIfNoCase User-Agent "^Xaldon" bot SetEnvIfNoCase User-Agent "^Xenu" bot SetEnvIfNoCase User-Agent "^Xaldon\ WebSpider" bot SetEnvIfNoCase User-Agent "^Zeus" bot SetEnvIfNoCase User-Agent "ZmEu" bot SetEnvIfNoCase User-Agent "^Zyborg" bot SetEnvIfNoCase User-Agent "^_CommonCrawler_Node_" bot SetEnvIfNoCase User-Agent "^_Cliqzbot" bot SetEnvIfNoCase User-Agent "^_Baiduspider" bot SetEnvIfNoCase User-Agent "^_Exabot" bot SetEnvIfNoCase User-Agent "^_GrapeshotCrawler" bot SetEnvIfNoCase User-Agent "^_Gluten_Free_Crawler" bot SetEnvIfNoCase User-Agent "^_DeuSu" bot SetEnvIfNoCase User-Agent "^_Dataprovider" bot SetEnvIfNoCase User-Agent "^_DuckDuckGo-Favicons-Bot" bot SetEnvIfNoCase User-Agent "^_SeznamBot" bot SetEnvIfNoCase User-Agent "^_007ac9_Crawler" bot SetEnvIfNoCase User-Agent "^_wmtips" bot SetEnvIfNoCase User-Agent "^rv" bot <Limit GET POST HEAD> Order Allow,Deny Allow from all Deny from env=bot </Limit> </IfModule> </IfModule>

Что будет, если робот "AhrefsBot" попробует зайти на сайт? Он получит в ответ ошибку 403 — доступ запрещён, и не сможет загрузить никакой контент сайта.

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

Если ваша работа завязана на аналитику в Semrush, Ahrefs, Similarweb, и прочих сервисах, то настройку подобной блокировки нужно делать внимательно.

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

Вместо заключения

Даже если вы внедрите хоть что-нибудь из текста выше — ваш сайт начнёт работать быстрее.

Думайте о скорости работы сайта на этапе разработки. Это влияет на SEO и конверсии, а в конечном итоге на деньги.

Полезные сервисы и плагины для оценки скорости работы сайта:

  • developers.google.com/speed/pagespeed/insights/
  • gtmetrix.com
  • googlechrome.github.io/lighthouse/viewer/
  • web.dev/measure/
  • chrome.google.com/webstore/detail/web-vitals/ahfhijdlegdabablpippeagghigmibma
3636
38 комментариев

Перед минификацией CSS ещё можно прогнать его через Critical, чтобы разделить файл на две части: то, что нужно для отображения верхней части сайта обязательно, и всё остальное. Первый файл кинуть в HEAD, а второй уже в самом низу.

7

Спасибо, годная статья. Однозначно в закладки.

2

😢 когда у тебя сайт на tilda

1

Конструктор для лендинга ок. Для полноценного сайта не годится, какой бы там функционал не был. Это мое мнение.

3

Обидно, когда гугловская рекапча 3 не даёт пройти гугловский тест Core web vitals в гугловской PageSpeed.
Статья прикольная, жаль никто никогда не рассказывает как на практике решить проблему внешних скриптов, как правильно сделать criticalpath и как грамотно настраивать wp super cache.

1