Техническое SEO - это не просто «поиск битых ссылок»
Это инженерная дисциплина, обеспечивающая беспрепятственный доступ поисковых роботов к контенту, понимание семантики этого контента и высокую скорость доставки пользователю. Если техническая база слаба, контентный и ссылочный SEO не дадут результата.
Глава 1. Подготовка и Настройка Среды (Environment Setup)
Прежде чем запускать краулер, необходимо собрать анамнез сайта и подготовить инструменты.
1.1. Сбор доступов и аналитики
- Google Search Console (GSC) & Яндекс.Вебмастер: Доступ на уровне «Владелец» или «Полный доступ».
- Системы аналитики: Google Analytics 4 (GA4), Яндекс.Метрика, серверные логи (Log files).
- CMS и Сервер: Доступ к админ-панели, FTP/SFTP, SSH (для чтения
.htaccess,nginx.conf,robots.txt). - История сайта: Были ли смены домена, редизайны, миграции CMS?
1.2. Настройка Краулера (на примере Screaming Frog SEO Spider)
- Режим краулинга:
Spider(обход по ссылкам). - Configuration > Spider:
- Включить
Crawl Linked JavaScript Files(если используете JS-фреймворки). - Включить
Crawl & Analyzeдля CSS/JS/Images (для проверки веса страниц). - Установить
Limit Crawl Depth(без ограничений для полного аудита).
- Включить
- Configuration > User-Agent:
- Создать кастомный User-Agent или выбрать
Googlebot Smartphone(Mobile-First Indexing является стандартом с 2019 года).
- Создать кастомный User-Agent или выбрать
- Configuration > Authentication: Настроить доступ к закрытым зонам (корзина, личный кабинет), чтобы проверить их индексацию (они должны быть закрыты!).
- Configuration > API Access: Подключить API Google Search Console, PageSpeed Insights и Ahrefs/Moz для подтягивания данных прямо в интерфейс краулера.
Глава 2. Индексация и Краулинговый Бюджет (Crawlability & Indexability)
Краулинговый бюджет - это количество URL, которое робот готов просканировать на вашем сайте за единицу времени. Наша задача направить этот бюджет на важные страницы.
2.1. Анализ robots.txt
Файл должен находиться в корне: https://example.com/robots.txt.
Правила написания:
- Директивы чувствительны к регистру (
Disallow, а неdisallow). - Слеши в начале путей обязательны (
Disallow: /admin/). - Обязательно указать
Sitemap: https://example.com/sitemap.xmlв конце файла.
Чек-лист robots.txt:
- Закрыты ли технические директории:
/admin/,/api/,/search?,/cart/,/checkout/,/user/? - Открыты ли ресурсы, влияющие на рендеринг:
.css,.js,.woff2, изображения? (Закрытие CSS/JS приведет к тому, что Google увидит «сломанную» страницу и понизит её в выдаче). - Закрыты ли UTM-метки и параметры сессий? (Пример:
Disallow: /*?utm_*,Disallow: /*?session_id=). - Используется ли
Clean-paramдля Яндекса (для склейки дублей с GET-параметрами)?
⚠️ Критическая ошибка: Закрытие всего сайта через
Disallow: /на Production-сервере (часто случается после переноса сайта со Staging-среды).
2.2. Анализ sitemap.xml
Карта сайта является навигатором для бота.
- Формат: Строгое соответствие протоколу sitemaps.org.
- Лимиты: Не более 50 000 URL или 50 МБ на один файл. Использовать
Sitemap Index(индексный файл). - Тег
<lastmod>: Должен обновляться только при реальном изменении контента на странице. Фейковые даты (обновление каждый день) игнорируются Google и могут привести к пессимизации карты сайта. - Чистота Sitemap: В нем должны быть только страницы с кодом
200 OK, которые имеютindex, followи являются каноническими.- Запрещено: 301 редиректы, 404 ошибки, страницы с
noindex, страницы, закрытые вrobots.txt.
- Запрещено: 301 редиректы, 404 ошибки, страницы с
2.3. HTTP Статус-коды и Обработка Ошибок
Необходимо проанализировать все ответы сервера, которые получил краулер.
| Код | Название | Действие SEO-специалиста |
|---|---|---|
| 200 | OK | Идеально. Проверить, нет ли на странице noindex или canonical на другую страницу. |
| 301 | Moved Permanently | Проверить, куда ведет. Внутренние ссылки на сайте должны вести сразу на конечный URL (200), минуя 301. |
| 302 | Found (Temporary) | Ошибка для SEO. Если страница переехала навсегда, менять на 301. |
| 404 | Not Found | Проверить внутренние ссылки, ведущие на 404. Настроить красивую страницу 404 с поиском и ссылками на популярные разделы. |
| 410 | Gone | Использовать для навсегда удаленных товаров/статей, которые не имеют аналогов. Ускоряет их вылет из индекса по сравнению с 404. |
| 5xx | Server Error | Критично. Анализировать серверные логи. Часто возникает при парсинге ботами тяжелых страниц (фильтры). |
2.4. Анализ Лог-файлов (Log File Analysis)
Краулер показывает, что может обойти бот. Логи показывают, что он обходит на самом деле.
Инструменты: Screaming Frog Log File Analyser, Splunk, Kibana, Python (pandas).
Что ищем:
- Сравнение User-Agents: Как часто заходит Googlebot vs. Яндекс.Бот?
- Crawl Waste (Трата бюджета): На какие директории бот тратит больше всего запросов? (Часто это бесконечные комбинации фильтров или календари).
- Orphan Pages (Страницы-сироты): URL'ы, которые есть в логах сервера или в Sitemap, но на них нет ни одной внутренней ссылки на сайте. Бот находит их, но вес (PageRank) на них не передается.
Глава 3. Архитектура, URL и Перелинковка
3.1. Структура URL (ЧПУ)
- Иерархия:
domain.com/category/subcategory/product-name/ - Требования:
- Только нижний регистр (Linux-серверы чувствительны к регистру,
Pageиpage— это разные URL, что ведет к дублям). - Разделитель слов — только дефис (
-), не подчеркивание (_). - Отсутствие спецсимволов и кириллицы в URL (всегда используйте транслитерацию).
- Минимальная длина (убирать стоп-слова:
/kak-kupit-divan/->/divan/).
- Только нижний регистр (Linux-серверы чувствительны к регистру,
3.2. Глубина вложенности (Click Depth)
Правило трех кликов: любая важная коммерческая или информационная страница должна находиться не более чем в 3-х кликах от Главной.
Решение: Внедрение "Хлебных крошек" (Breadcrumbs), тегов (с осторожностью), блоков "Похожие товары", "Хиты продаж", HTML-карты сайта для людей.
3.3. Внутренняя перелинковка
- Анкор-лист: Ссылки должны содержать релевантные ключевые слова. Избегать анкоров «тут», «здесь», «читать далее».
- Сквозные ссылки: Ссылки в футере и хедере передают вес всем страницам. Не размещайте там ссылки на низкоуровневые страницы (только главные категории, контакты, о нас).
- Hub & Spoke: Создавайте страницы-хабы (гайды, категории), которые ссылаются на кластеры связанных статей/товаров, а те ссылаются обратно на хаб.
Глава 4. Дублирование и Каноникализация
Дубли размывают ссылочный вес и заставляют бота тратить бюджет впустую.
4.1. Склейка Зеркал (301 Редиректы на уровне сервера)
Сайт должен отдавать контент только по одному главному зеркалу.
Nginx конфиг для склейки http -> https, www -> non-www и удаления trailing slash (слэша на конце):
server {
listen 80;
server_name example.com www.example.com;
# Редирект на HTTPS и без www
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
# Редирект с www на без-www
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
# Убираем слэш на конце (кроме корня сайта)
rewrite ^/(.*)/$ /$1 permanent;
# ... остальные настройки ...
}
4.2. Тег rel="canonical"
Это указание поисковику, какая страница является «оригиналом» среди группы дублей.
- Самоссылающийся Canonical: На каждой индексируемой странице должен стоять canonical, указывающий на саму себя (защита от появления GET-параметров, например
?utm_source). - Абсолютные пути: Всегда используйте полные URL (
https://example.com/page), а не относительные (/page). - Типичные ошибки:
- Страница пагинации (
/page/2/) указывает canonical на/page/1/. Это грубая ошибка! Google перестанет индексировать вторую страницу. Пагинация должна иметь самоссылающийся canonical. - Canonical указывает на страницу, закрытую в
robots.txtили имеющуюnoindex. - Canonical указывает на 404 страницу.
- Страница пагинации (
4.3. Пагинация
- Google: Официально отказался от поддержки
rel="next"иrel="prev". Рекомендует делать каждую страницу пагинации самостоятельной (самоссылающийся canonical) и обеспечивать уникальность контента (например, разные товары на разных страницах). - Яндекс: Все еще учитывает
rel="next/prev". Рекомендуется внедрять для Яндекса, а для Google полагаться на корректную внутреннюю перелинковку и фильтры. - View All (Показать все): Если товаров мало, можно делать страницу "Показать все" и ставить на все страницы пагинации canonical на неё. Но если товаров >100, это убьет скорость загрузки (LCP).
Глава 5. Скорость, Рендеринг и Core Web Vitals (CWV)
С 2024 года метрика INP (Interaction to Next Paint) полностью заменила FID. CWV являются прямым фактором ранжирования.
5.1. Анализ Core Web Vitals (Данные CrUX и PSI)
- LCP (Largest Contentful Paint) ≤ 2.5с:
- Проблема: Медленная загрузка главного баннера или заголовка H1.
- Решение: Использовать
<link rel="preload" as="image" href="...">для LCP-изображения. Оптимизировать TTFB (время ответа сервера).
- INP (Interaction to Next Paint) ≤ 200мс:
- Проблема: Main Thread блокируется тяжелым JavaScript при клике на кнопку/фильтр.
- Решение: Разбиение длинных задач (Long Tasks), использование
requestIdleCallback, перенос вычислений на Web Workers, отложенная загрузка некритичных JS-библиотек.
- CLS (Cumulative Layout Shift) ≤ 0.1:
- Проблема: Элементы "прыгают" при загрузке (рекламные баннеры, шрифты, картинки без размеров).
- Решение:
- Всегда указывать
widthиheightдля<img>и<video>(или использовать CSSaspect-ratio). - Для шрифтов использовать
font-display: swapи<link rel="preload" as="font">, чтобы избежать FOIT/FOUT. - Резервировать место под динамический контент (скелетоны).
- Всегда указывать
5.2. JavaScript Рендеринг (CSR vs SSR)
Поисковые боты умеют рендерить JS, но это происходит во "вторую волну" индексации (может занимать дни или недели).
- CSR (Client-Side Rendering, SPA на React/Vue): Плохо для SEO. Контент отсутствует в исходном HTML.
- Решение: Переход на SSR (Next.js, Nuxt.js) или SSG (Static Site Generation). Бот должен получать готовый HTML при первом запросе.
- Проверка: В Screaming Frog включите
Configuration > Spider > Rendering > JavaScript. Сравните DOM-дерево с отключенным JS и включенным. Если в "Raw HTML" нет текста и ссылок, то у вас проблемы с индексацией.
5.3. Оптимизация Изображений
- Форматы: Забудьте про JPEG/PNG для графики. Используйте WebP или AVIF (с фоллбэком через тег
<picture>). - Адаптивность: Обязательно использовать
srcsetиsizes, чтобы мобильные устройства не грузили десктопные картинки весом в 2МБ. - Lazy Loading:
<img loading="lazy">для всех изображений, кроме LCP (первого экрана). Для LCP использоватьfetchpriority="high".
Глава 6. Микроразметка (Structured Data / Schema.org)
Микроразметка помогает AI-поиску (SGE / AI Overviews) и классическим сниппетам понимать суть страницы. Формат: JSON-LD (рекомендован Google).
6.1. Обязательные типы разметки
- WebSite (SearchAction): Позволяет добавить строку поиска прямо в сниппет Google.
- Organization / LocalBusiness: Для страниц "Контакты" и "О нас". Указание соцсетей, логотипа, юр. данных.
- BreadcrumbList: Для хлебных крошек.
- Product (E-commerce): Критически важно. Должны быть заполнены
name,image,description,sku,brand,offers(сprice,priceCurrency,availability),aggregateRating. - Article / NewsArticle: Для блогов. Обязательны
author,datePublished,image. - FAQPage / HowTo: Для страниц с частыми вопросами и инструкциями (дает богатые сниппеты).
6.2. Валидация
- Инструмент: Google Rich Results Test и Schema Markup Validator.
- Ошибка: Разметка
Productна странице категории. (Разметка товара должна быть только на карточке товара!). - Ошибка: Скрытая разметка (текст в JSON-LD не виден пользователю на странице). Это считается спамом и ведет к ручным санкциям.
Глава 7. Безопасность и Серверные Заголовки
7.1. HTTPS и SSL/TLS
- Сайт должен работать только по HTTPS.
- Проверка на Mixed Content: все ресурсы (картинки, скрипты, API-запросы) должны грузиться по HTTPS.
- Внедрение HSTS (HTTP Strict Transport Security). Это указывает браузеру всегда обращаться к сайту по HTTPS, даже если пользователь ввел
http://.- Заголовок:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- Заголовок:
7.2. Security Headers (Заголовки безопасности)
Задаются на уровне Nginx/Apache. Не влияют на SEO напрямую, но защищают от взлома, фишинга и кликджекинга, что косвенно сохраняет позиции.
add_header X-Frame-Options "SAMEORIGIN" always; # Защита от iframe-инъекций
add_header X-Content-Type-Options "nosniff" always; # Защита от MIME-сниффинга
add_header Referrer-Policy "strict-origin-when-cross-origin" always; # Контроль передачи Referer
add_header Permissions-Policy "geolocation=(), microphone=()" always; # Отключение доступа к API браузера
Глава 8. Специфические Сценарии
8.1. E-commerce: Фасетный поиск и Фильтры
Генераторы дублей №1. Комбинации фильтров (?color=red&size=xl&price=100-200) создают миллионы мусорных URL.
Алгоритм работы с фильтрами:
- Закрыть от индексации все комбинации, которые не имеют поискового спроса (например, выбор 3-х и более параметров, сортировки
?sort=price,?view=list). Делается черезrobots.txt(Disallow: /*?sort=) илиmeta robots noindex. - Оставить открытыми только ЧПУ-фильтры, под которые есть спрос (например,
/catalog/divany/krasnye/). Для них генерировать уникальный Title, Description и H1. - Использовать
rel="canonical"на корневую категорию для закрытых фильтров.
8.2. E-commerce: Товар "Нет в наличии"
- Не делайте 404! Если товар временно отсутствует, отдавайте
200 OK, но добавьте микроразметкуavailability: OutOfStock. - Если товар больше не будет поставляться, сделайте
410 Goneили настройте301редирект на ближайший аналог или на категорию (но с предупреждением для пользователя). - Скрывайте отсутствующие товары из внутреннего поиска и Sitemap.
8.3. Мультиязычность (Hreflang)
Используется для указания языковых и региональных версий сайта.
Правила hreflang:
- Двусторонняя связь: Если страница EN ссылается на страницу RU, то страница RU обязана ссылаться обратно на EN. Иначе тег игнорируется.
- x-default: Должна быть страница-заглушка (или главная), указанная как
hreflang="x-default"для пользователей, чей язык не определен. - Форматы: Можно внедрять через
<link>в<head>, через HTTP-заголовки (для PDF/файлов) или черезsitemap.xml(рекомендуется для больших сайтов, чтобы не раздувать HTML-код).
Пример в HTML:
<link rel="alternate" hreflang="en-gb" href="https://example.com/uk/page" />
<link rel="alternate" hreflang="en-us" href="https://example.com/us/page" />
<link rel="alternate" hreflang="x-default" href="https://example.com/page" />
Финальный Чек-лист (Quick Reference)
Перед сдачей проекта или регулярным отчетом пробегитесь по этому списку:
robots.txtоткрыт, Sitemap указан, мусор закрыт.sitemap.xmlсодержит только 200 OK, без редиректов и noindex.- Все зеркала (www, http, слэши) склеены через 301 редирект.
- На всех страницах есть самоссылающийся
<link rel="canonical">. - Отсутствуют битые ссылки (404) во внутренней перелинковке.
- H1 на странице только один, Title и Description уникальны и заполнены.
- Core Web Vitals (LCP, INP, CLS) в зеленой зоне на мобильных устройствах.
- Изображения отдают WebP/AVIF, имеют
width/heightиlazy load. - Микроразметка Schema.org проходит валидацию в Google Rich Results Test.
- Сайт работает по HTTPS, настроен HSTS, нет Mixed Content.
- Страницы пагинации и фильтров корректно обрабатываются (не создают дублей).
- Логи сервера проанализированы, краулинговый бюджет не тратится на мусор.