seo
#Веб-разработка

Алгоритм технического SEO-аудита сайта

~11 мин чтения
Содержание

Техническое 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)

  1. Режим краулинга: Spider (обход по ссылкам).
  2. Configuration > Spider:
    • Включить Crawl Linked JavaScript Files (если используете JS-фреймворки).
    • Включить Crawl & Analyze для CSS/JS/Images (для проверки веса страниц).
    • Установить Limit Crawl Depth (без ограничений для полного аудита).
  3. Configuration > User-Agent:
    • Создать кастомный User-Agent или выбрать Googlebot Smartphone (Mobile-First Indexing является стандартом с 2019 года).
  4. Configuration > Authentication: Настроить доступ к закрытым зонам (корзина, личный кабинет), чтобы проверить их индексацию (они должны быть закрыты!).
  5. 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.

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).

Что ищем:

  1. Сравнение User-Agents: Как часто заходит Googlebot vs. Яндекс.Бот?
  2. Crawl Waste (Трата бюджета): На какие директории бот тратит больше всего запросов? (Часто это бесконечные комбинации фильтров или календари).
  3. 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/).

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)

  1. LCP (Largest Contentful Paint) ≤ 2.5с:
    • Проблема: Медленная загрузка главного баннера или заголовка H1.
    • Решение: Использовать <link rel="preload" as="image" href="..."> для LCP-изображения. Оптимизировать TTFB (время ответа сервера).
  2. INP (Interaction to Next Paint) ≤ 200мс:
    • Проблема: Main Thread блокируется тяжелым JavaScript при клике на кнопку/фильтр.
    • Решение: Разбиение длинных задач (Long Tasks), использование requestIdleCallback, перенос вычислений на Web Workers, отложенная загрузка некритичных JS-библиотек.
  3. CLS (Cumulative Layout Shift) ≤ 0.1:
    • Проблема: Элементы "прыгают" при загрузке (рекламные баннеры, шрифты, картинки без размеров).
    • Решение:
      • Всегда указывать width и height для <img> и <video> (или использовать CSS aspect-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. Обязательные типы разметки

  1. WebSite (SearchAction): Позволяет добавить строку поиска прямо в сниппет Google.
  2. Organization / LocalBusiness: Для страниц "Контакты" и "О нас". Указание соцсетей, логотипа, юр. данных.
  3. BreadcrumbList: Для хлебных крошек.
  4. Product (E-commerce): Критически важно. Должны быть заполнены name, image, description, sku, brand, offers (с price, priceCurrency, availability), aggregateRating.
  5. Article / NewsArticle: Для блогов. Обязательны author, datePublished, image.
  6. 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.

Алгоритм работы с фильтрами:

  1. Закрыть от индексации все комбинации, которые не имеют поискового спроса (например, выбор 3-х и более параметров, сортировки ?sort=price, ?view=list). Делается через robots.txt (Disallow: /*?sort=) или meta robots noindex.
  2. Оставить открытыми только ЧПУ-фильтры, под которые есть спрос (например, /catalog/divany/krasnye/). Для них генерировать уникальный Title, Description и H1.
  3. Использовать rel="canonical" на корневую категорию для закрытых фильтров.

8.2. E-commerce: Товар "Нет в наличии"

  • Не делайте 404! Если товар временно отсутствует, отдавайте 200 OK, но добавьте микроразметку availability: OutOfStock.
  • Если товар больше не будет поставляться, сделайте 410 Gone или настройте 301 редирект на ближайший аналог или на категорию (но с предупреждением для пользователя).
  • Скрывайте отсутствующие товары из внутреннего поиска и Sitemap.

8.3. Мультиязычность (Hreflang)

Используется для указания языковых и региональных версий сайта.

Правила hreflang:

  1. Двусторонняя связь: Если страница EN ссылается на страницу RU, то страница RU обязана ссылаться обратно на EN. Иначе тег игнорируется.
  2. x-default: Должна быть страница-заглушка (или главная), указанная как hreflang="x-default" для пользователей, чей язык не определен.
  3. Форматы: Можно внедрять через <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.
  • Страницы пагинации и фильтров корректно обрабатываются (не создают дублей).
  • Логи сервера проанализированы, краулинговый бюджет не тратится на мусор.
Нажми на меня и выбери удобный мессенджер для связи
Telegram Telegram Max Max