Аудит 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 днів.







