Аудит SEO-оптимизации сайта
SEO-аудит — систематическая проверка технического состояния сайта, контентных факторов и ссылочного профиля. Результат — не абстрактная оценка «7 из 10», а конкретный список проблем с приоритетами и способами устранения. Аудит разделяется на техническую часть, on-page анализ и анализ сигналов.
Техническая часть
Краулинг сайта
Первый шаг — пройти сайт краулером (Screaming Frog, Sitebulb, или собственный на Python) и собрать все URL:
# Быстрая проверка через sitemap
import requests
from xml.etree import ElementTree
resp = requests.get('https://mysite.ru/sitemap.xml')
tree = ElementTree.fromstring(resp.content)
ns = {'sm': 'http://www.sitemaps.org/schemas/sitemap/0.9'}
urls = [loc.text for loc in tree.findall('.//sm:loc', ns)]
print(f'URLs в sitemap: {len(urls)}')
# Проверка статус-кодов
errors = []
for url in urls[:200]: # первые 200 для демо
r = requests.head(url, allow_redirects=True, timeout=5)
if r.status_code not in (200, 301, 302):
errors.append({'url': url, 'status': r.status_code})
print(f'Ошибочных URL: {len(errors)}')
Проверяемые технические параметры:
| Параметр | Что ищем | Критичность |
|---|---|---|
| Статус-коды | 4xx в sitemap, 5xx в навигации | Высокая |
| Дубли страниц | Без canonical, ?sort=, ?page= |
Высокая |
| robots.txt | Блокировка нужных разделов | Высокая |
| HTTPS | Mixed content, редиректы www/http | Высокая |
| Скорость (Core Web Vitals) | LCP, INP, CLS | Высокая |
| Canonical | Отсутствие или неправильный self-canonical | Средняя |
| Hreflang | Дублирующиеся/неверные коды языков | Средняя |
| Структурированные данные | Ошибки schema.org | Средняя |
Robots.txt и индексация:
# Проверить доступность robots.txt
curl -s https://mysite.ru/robots.txt
# Проверить индексацию в Google
# site:mysite.ru — сколько страниц в индексе
# site:mysite.ru/admin — нет ли закрытых разделов в индексе
Sitemap:
- XML sitemap должен содержать только 200-е страницы
- Не должно быть страниц с
noindex -
<lastmod>должен совпадать с реальной датой изменения - Размер sitemap: максимум 50 000 URL или 50 MB на файл
On-page анализ
Title и meta description:
# Массовая проверка title/description
from bs4 import BeautifulSoup
issues = []
for url in urls:
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
title = soup.find('title')
desc = soup.find('meta', {'name': 'description'})
t_len = len(title.text) if title else 0
d_len = len(desc['content']) if desc and desc.get('content') else 0
if t_len == 0: issues.append((url, 'no_title'))
elif t_len > 70: issues.append((url, f'title_too_long:{t_len}'))
if d_len == 0: issues.append((url, 'no_description'))
elif d_len > 160: issues.append((url, f'desc_too_long:{d_len}'))
Нормы: title 50–70 символов, description 120–160 символов. Шаблонные описания («Купить X в нашем магазине. Лучшие цены!» для всех товаров) — проблема дублей.
Заголовки H1–H6:
- Один H1 на страницу с основным ключевым запросом
- H2–H3 структурируют контент, не дублируют H1
- Порядок: H1 → H2 → H3 (без пропусков)
Контент:
- Thin content: страницы с менее 300 слов без структуры
- Дублированный контент: идентичные описания товаров из фида поставщика
- Страницы пагинации:
rel="next"/rel="prev"или canonical на первую
Внутренняя перелинковка
Хорошая внутренняя ссылочная структура распределяет вес страниц и помогает краулерам. Проблемы:
- Orphan pages — страницы без входящих внутренних ссылок (краулер их не найдёт)
- Глубина клика > 3 для важных страниц
- Broken internal links — ссылки на удалённые/редиректные страницы
-- Для CMS на SQL: найти страницы без входящих ссылок
SELECT p.url
FROM pages p
LEFT JOIN internal_links il ON il.target_url = p.url
WHERE il.id IS NULL AND p.status = 'published'
Структурированные данные
Google поддерживает rich snippets для: Product, Article, BreadcrumbList, FAQPage, Review, LocalBusiness, Event.
Валидация:
# Google Rich Results Test (API)
curl "https://searchconsole.googleapis.com/v1/urlTestingTools/mobileFriendlyTest:run" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://mysite.ru/product/123"}'
Ручная проверка: search.google.com/test/rich-results.
Анализ Core Web Vitals в разрезе SEO
Google использует CrUX-данные (field data) для ранжирования. Если у конкурента LCP < 2.5s, а у вас > 4s — это фактор, который влияет на позиции, особенно при прочих равных. Проверка через GSC: Search Console > Core Web Vitals показывает процент URL в Good/Needs improvement/Poor.
Ссылочный профиль (базовый уровень)
В рамках технического аудита проверяем:
- индекс в Ahrefs/Semrush — токсичные ссылки с заспамленных доменов
- anchor text distribution — переоптимизация (>60% коммерческих анкоров)
- потерянные ссылки на удалённые страницы без 301-редиректа
Формат отчёта
Аудит оформляется как таблица с приоритетами:
| Проблема | Страниц | Приоритет | Трудозатраты | Ожидаемый эффект |
|---|---|---|---|---|
| Дублированные title | 340 | Критично | 2 дня | Рост CTR в выдаче |
| Отсутствует canonical на страницах пагинации | 180 | Высокий | 0.5 дня | Устранение дублей |
| LCP > 4s на мобильных | Все страницы | Высокий | 3–5 дней | Рост позиций |
| Orphan pages в каталоге | 52 | Средний | 1 день | Улучшение краулинга |
| Отсутствует schema.org Product | 1200 товаров | Средний | 2 дня | Rich snippets |
Сроки аудита
Технический краулинг, анализ on-page, структурированные данные, CWV, приоритизированный отчёт для сайта 1000–5000 URL: 3–4 дня. Крупные eCommerce (50 000+ SKU): 5–7 дней.







