Утекает бюджет на контекстную рекламу, а органика не растёт? После масштабирования каталога или смены CMS часто обнаруживаются технические ошибки: битые ссылки, дубли страниц, неоптимизированные Core Web Vitals. Наш SEO-аудит выявляет и приоритизирует такие проблемы, экономя до 30% бюджета на исправлениях.
Мы провели аудит для более 200 проектов — от корпоративных порталов до маркетплейсов с миллионами товаров. Типичный кейс: у интернет-магазина с 50 000 позиций нашли 1 200 дублированных title — после их исправления CTR вырос на 15%. Аудит окупается за счёт увеличения органического трафика уже через 3–6 месяцев.
Какие технические проблемы выявляет SEO-аудит?
Краулинг сайта — первый шаг. Мы прогоняем сайт краулером (Screaming Frog, Sitebulb или собственный на Python) и собираем все URL, проверяя статус-коды, дубли, ошибочные редиректы и orphan pages.
# Быстрая проверка через 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 для избежания ошибок индексации
- Проверьте, что sitemap указан в robots.txt:
Sitemap: https://mysite.ru/sitemap.xml.
- Убедитесь, что служебные разделы (admin, cgi-bin) закрыты от индексации.
- Для AJAX-сайтов добавьте директиву
Disallow: /ajax/, если это не нужно для поиска.
- Используйте правило
Allow: / после Disallow для частичного разрешения.
# Проверить доступность robots.txt
curl -s https://mysite.ru/robots.txt
# Проверить индексацию в Google
# site:mysite.ru — сколько страниц в индексе
# site:mysite.ru/admin — нет ли закрытых разделов в индексе
Sitemap должен содержать только 200-е страницы, без noindex и с корректными <lastmod>. Размер — до 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. Шаблонные описания — проблема дублей. Заголовки H1–H6: один H1 с ключевым запросом, H2–H3 структурируют контент без пропусков порядка. Контент: проверяем thin content (<300 слов), дубли из фидов поставщика, страницы пагинации с rel="next"/"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'
Структурированные данные: проверяем валидность schema.org с помощью Google Rich Results Test. Поддерживаем типы: Product, Article, BreadcrumbList, FAQPage, Review, LocalBusiness, Event.
Что входит в аудит?
По итогам вы получаете:
- Полный дамп данных краулинга (CSV/Excel)
- Приоритизированный список проблем с трудозатратами и ожидаемым эффектом
- Документацию по техническим доработкам для разработчиков (с корневой причиной и способом устранения)
- Консультацию инженера по приоритетным исправлениям
- Гарантию качества: при обнаружении новых проблем после исправлений повторный мини-аудит бесплатно
Как Core Web Vitals влияют на ранжирование
Google использует CrUX-данные (field data) для ранжирования. Согласно рекомендациям Google Search Central, LCP должен быть менее 2.5 секунд. Если у конкурента LCP < 2.5s, а у вас > 4s — это серьёзный фактор при прочих равных. Проверка через Search Console показывает процент URL в Good/Needs improvement/Poor. На аудите мы даём конкретные причины: неоптимизированные изображения, тяжеловесный JavaScript, медленный серверный ответ.
Подробнее о метриках Core Web Vitals
- LCP (Largest Contentful Paint) — время загрузки основного контента. Влияет на скорость восприятия.
- INP (Interaction to Next Paint) — отзывчивость при взаимодействии. Измеряет задержки после клика/тапа.
- CLS (Cumulative Layout Shift) — визуальная стабильность. Предотвращает неожиданные смещения элементов.
Дополнительно: Core Web Vitals (Wikipedia)
Ссылочный профиль (базовый уровень)
В рамках технического аудита проверяем:
- Индекс в 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 |
Дополнительно мы предоставляем:
- Полный дамп данных краулинга (CSV/Excel)
- Рекомендации по исправлению с приоритетами (P0–P3)
- Документацию по техническим доработкам для разработчиков
- Гарантия качества: при обнаружении новых проблем после исправлений повторный мини-аудит бесплатно
Сроки аудита
Технический краулинг, анализ on-page, структурированные данные, CWV, приоритизированный отчёт для сайта 1000–5000 URL: 3–4 дня. Крупные eCommerce (50 000+ SKU): 5–7 дней. Мы работаем с проектами любого масштаба — от лендингов до маркетплейсов.
Свяжитесь с нами для предварительной оценки вашего сайта — пришлём демо-версию отчёта на основе типовых проблем вашей ниши. Постоянный мониторинг эффективнее разового аудита: мы предлагаем абонентское сопровождение с ежемесячными проверками и корректировками. Закажите аудит и получите консультацию инженера по приоритетным исправлениям.
Почему Core Web Vitals критичны для технического SEO
PageSpeed показывает 34/100 на мобильных. В Search Console — красные метрики по всем страницам категорий. Конкурент с сайтом на 3 года старше стоит выше в выдаче, несмотря на более слабые тексты. Техническая производительность стала прямым ранжирующим фактором — и разрыв между «приемлемо» и «быстро» стоит позиций. Мы решали эту проблему для десятков проектов — от интернет-магазинов до SaaS-платформ — и знаем, какие ошибки съедают ранжирование.
Core Web Vitals: что реально влияет на позиции
Google использует три метрики как сигналы ранжирования (Page Experience): LCP (Largest Contentful Paint), CLS (Cumulative Layout Shift), INP (Interaction to Next Paint, заменил FID с последнего крупного обновления алгоритма).
LCP: почему 8 секунд — это не проблема изображения
LCP измеряет время отрисовки самого большого видимого элемента страницы. Чаще всего — hero image или H1. Пороги: хорошо < 2.5s, плохо > 4s.
Типичный диагноз на реальном проекте: интернет-магазин одежды, LCP 7.8s на мобильных. Элемент — hero image категории, 4.2MB JPEG без srcset, загружается через CSS background-image (не <img>). Проблема здесь двойная: во-первых, браузер не может preload CSS background images через <link rel="preload"> стандартным способом. Во-вторых, 4.2MB на мобильном соединении — это физически медленно.
Решение по шагам:
- Переносим hero из CSS background в
<img> с fetchpriority="high" и loading="eager"
- Конвертируем в WebP, добавляем
srcset: 800w для мобильных, 1400w для десктопа
-
<link rel="preload" as="image" href="hero-800.webp" media="(max-width: 768px)"> в <head>
- Убираем все render-blocking скрипты выше hero через
defer
Итог: LCP 7.8s → 1.9s. Без смены хостинга, без CDN.
Если LCP — не изображение, а текстовый блок: проблема может быть в TTFB (медленный сервер), в render-blocking CSS/JS, или в web fonts с font-display: block.
CLS: смещения, которые раздражают пользователя и Google
CLS измеряет суммарный сдвиг элементов в процессе загрузки. Пороги: хорошо < 0.1, плохо > 0.25. CLS 0.35 — это баннер, который появляется через секунду и сдвигает всё содержимое страницы вниз.
Источники CLS:
- Изображения без заданных размеров.
<img src="photo.jpg"> без width и height — браузер не резервирует место, контент прыгает при загрузке. Фикс: явные width/height или aspect-ratio в CSS.
- Рекламные блоки и виджеты. Google Ads, чат-виджеты, cookie consent — всё, что появляется после основного контента. Решение: резервировать место через
min-height или загружать до рендера основного контента.
- Web fonts. FOUT (Flash of Unstyled Text) и FOIT (Flash of Invisible Text) могут вызывать переформатирование.
font-display: swap с size-adjust (CSS свойство для выравнивания размеров fallback шрифта) минимизирует CLS.
- Динамический контент. Если блок появляется после загрузки (fetch данных, lazy load) — добавляем skeleton placeholder с нужными размерами.
| Типичный сценарий |
CLS до |
CLS после |
Основной фикс |
Баннер скидок без min-height |
0.42 |
0.02 |
min-height: 300px |
| Картинки в статьях без атрибутов |
0.18 |
0.01 |
width/height + aspect-ratio |
| Виджет чата, загружаемый через 3с |
0.35 |
0.05 |
position: fixed с зарезервированным отступом |
INP: почему интерфейс «зависает» на 500ms
INP измеряет задержку ответа на любое взаимодействие пользователя: клик, тап, ввод. Пороги: хорошо < 200ms, плохо > 500ms. INP 680ms — это когда пользователь нажимает кнопку фильтра, а ничего не происходит полсекунды.
Главная причина высокого INP — заблокированный main thread. JavaScript-бандл 2.1MB парсируется и выполняется синхронно. Пока выполняется, пользовательские события не обрабатываются.
Диагностика через Chrome DevTools → Performance → взаимодействие с подозрительной задержкой → найти Long Tasks (> 50ms). Типичные виновники:
- Непрерывная обработка большого списка без
requestIdleCallback или requestAnimationFrame
- Тяжёлые event listeners без
debounce/throttle
- Синхронный setState в React, который триггерит полный ре-рендер сложного дерева компонентов
- Third-party scripts: livechat, аналитика, виджеты — они исполняются в том же main thread
Решения: code splitting через динамический import(), перенос тяжёлых вычислений в Web Workers, React.memo + useMemo для предотвращения лишних ре-рендеров, scheduler API для приоритизации задач.
Schema.org: разметка, которую читают роботы
Структурированные данные через JSON-LD — не прямой ранжирующий фактор, но дают rich snippets в выдаче (звёзды рейтингов, цены, дата публикации), что увеличивает CTR на 20–30%.
Типы разметки по сценариям:
-
E-commerce:
Product с offers (цена, наличие, валюта), aggregateRating (рейтинг из отзывов), brand. BreadcrumbList для навигации. ItemList для страниц категорий.
-
Статьи и блог:
Article или BlogPosting с author, datePublished, dateModified, image. Organization и WebSite на главной странице — помогают Google связать сайт с брендом.
-
Локальный бизнес:
LocalBusiness с address, telephone, openingHours, geo. Критично для локального SEO.
-
FAQ:
FAQPage с mainEntity — вопросы и ответы могут появляться прямо в выдаче как раскрывающийся блок.
Валидация: Google Rich Results Test и Schema Markup Validator. Частая ошибка — указать price без priceCurrency, или ratingValue без reviewCount. Google игнорирует неполную разметку.
Как проводить технический SEO-аудит
Сканируемость. robots.txt блокирует нужные страницы (или наоборот, не блокирует служебные). Canonical URLs настроены неправильно — дублируются страницы с UTM-метками. Sitemap содержит страницы с noindex. Всё это Screaming Frog или Sitebulb покажут за час сканирования.
Core Web Vitals в масштабе. Google Search Console → Core Web Vitals → смотрим не отдельные страницы, а группы URL (шаблон страницы продукта, шаблон категории, блог). Проблема обычно системная — одна ошибка в шаблоне портит сотни страниц.
JavaScript SEO. Google рендерит JavaScript, но с задержкой (иногда дни для полного рендера). Для критичного контента — SSR или SSG обязательны. Проверяем через Search Console → Inspect URL → View Crawled Page: что видит Googlebot.
Internal linking. Орфанные страницы (нет входящих внутренних ссылок) теряют PageRank. Битые ссылки (404) — сигнал качества.
Типичные ошибки при внедрении Schema.org
- Указан
price без priceCurrency — разметка игнорируется.
-
ratingValue без reviewCount — в выдаче не показывается.
- Несколько
Product на одной странице без @type: ItemList — Google берёт только первый.
- JSON-LD в GTM — Google не всегда видит динамическую разметку, лучше серверный рендеринг.
| Этап работы |
Что входит |
Срок |
| Аудит |
Сканирование, анализ Core Web Vitals, аудит Schema, отчёт с приоритетами |
1–2 недели |
| Оптимизация одного шаблона |
LCP, CLS, INP, внедрение SSR/SSG, настройка preload |
2–4 недели |
| Полная техническая оптимизация |
Все шаблоны, code splitting, Web Workers, мониторинг в CI |
4–10 недель |
| Внедрение Schema.org |
JSON-LD генерация, валидация, тестирование rich snippets |
1–3 недели |
Что входит в работу
- Документация: отчёт с найденными проблемами, roadmap по приоритетам, тайминги для каждого этапа.
- Доступы: настройка мониторинга (SpeedCurve, Sentry Search Console), передача dashboard.
- Обучение: разбор типичных ошибок для вашей команды (1–2 созвона).
- Поддержка: сопровождение в течение месяца после деплоя — проверка метрик, фикс регрессий.
Свяжитесь с нами — мы оценим ваш проект за 2 дня и покажем, сколько позиций можно вернуть за счёт технического SEO. Опыт работы с проектами уровня сотен тысяч посещений в месяц — гарантируем измеримый результат в Core Web Vitals до/после. Закажите аудит в этой форме — получите персональный чек-лист из 15 пунктов.