Реализация аудита существующего контента перед миграцией
Аудит контента — инвентаризация и анализ всех материалов на текущем сайте перед переносом на новую платформу. Позволяет понять, что переносить, что обновлять, а что удалять.
Задачи аудита
- Составить полный список URL на сайте
- Выявить устаревший и дублирующий контент
- Определить SEO-показатели каждой страницы
- Найти битые ссылки и отсутствующие метаданные
- Приоритизировать контент для переноса
Краулинг сайта для составления инвентаря
Screaming Frog — стандартный инструмент для аудита:
Конфигурация:
- Configuration → Spider → Crawl all subdomains
- Включить: JS rendering (для SPA)
- Экспорт: All tabs → Save as CSV
Результат: CSV с полями — URL, Title, Meta Description, H1, Status Code, Indexability, Word Count, Inlinks, Outlinks.
Python-краулер для автоматизации:
import scrapy
from scrapy.crawler import CrawlerProcess
class ContentAuditSpider(scrapy.Spider):
name = 'content_audit'
start_urls = ['https://company.com']
custom_settings = {
'DEPTH_LIMIT': 10,
'DOWNLOAD_DELAY': 0.5,
'FEEDS': {'audit_results.csv': {'format': 'csv'}}
}
def parse(self, response):
yield {
'url': response.url,
'status': response.status,
'title': response.css('title::text').get(''),
'h1': response.css('h1::text').get(''),
'meta_description': response.css('meta[name="description"]::attr(content)').get(''),
'canonical': response.css('link[rel="canonical"]::attr(href)').get(''),
'robots': response.css('meta[name="robots"]::attr(content)').get('all'),
'word_count': len(' '.join(response.css('main *::text').getall()).split()),
'internal_links': len(response.css('a[href^="/"]')),
'images_without_alt': len(response.css('img:not([alt])')),
'last_modified': response.headers.get('Last-Modified', b'').decode()
}
for link in response.css('a::attr(href)').getall():
yield response.follow(link, self.parse)
Анализ SEO-данных
Экспорт из Google Search Console:
- Performance → Pages: клики, показы, CTR, позиция
- Coverage: индексированные / не индексированные страницы
- URL Inspection: статус конкретных URL
Сопоставление с краулинговыми данными в Python:
import pandas as pd
crawl_data = pd.read_csv('audit_results.csv')
gsc_data = pd.read_csv('gsc_pages.csv') # экспорт из GSC
merged = crawl_data.merge(gsc_data, on='url', how='left')
merged['has_seo_value'] = merged['clicks'] > 0 # страницы с трафиком
Классификация контента
Каждая страница получает метку:
| Решение | Критерии |
|---|---|
| Перенести | Клики > 0, уникальный контент, актуально |
| Обновить при переносе | Контент устарел, но есть SEO-вес |
| Объединить | Дублирующие страницы на одну тему |
| Удалить + редирект | Нет трафика, дубль, thin content |
| Не переносить | Тестовые страницы, архив, служебные URL |
def classify_page(row):
if row.get('noindex') or row['status'] != 200:
return 'skip'
if row.get('clicks', 0) > 100 or row.get('inlinks', 0) > 5:
return 'migrate_priority_high'
if row.get('word_count', 0) < 100:
return 'review_thin_content'
if row.get('clicks', 0) > 0:
return 'migrate'
return 'archive'
Анализ медиафайлов
# Список всех медиафайлов на сервере
find /var/www/uploads -type f | awk -F. '{print $NF}' | sort | uniq -c
# Файлы без ссылок из контента (потенциальный мусор)
# Шаг 1: извлечь все img src из БД
mysql -e "SELECT DISTINCT image_url FROM posts WHERE image_url IS NOT NULL" > used_files.txt
# Шаг 2: сравнить с файлами на диске
comm -23 <(ls /uploads/ | sort) <(sort used_files.txt)
Инвентарь метаданных SEO
# Найти страницы без meta description
missing_meta = merged[merged['meta_description'].isna() | (merged['meta_description'] == '')]
print(f"Без meta description: {len(missing_meta)} страниц")
# Найти дублирующиеся Title
duplicate_titles = merged[merged.duplicated(subset='title', keep=False)]
print(f"Дублирующиеся Title: {len(duplicate_titles)} страниц")
# Экспорт задач для копирайтеров
missing_meta[['url', 'title', 'h1']].to_csv('tasks_add_meta.csv', index=False)
Итоговый отчёт аудита
Структура отчёта:
- Сводная статистика (общее число URL, статусы, распределение по типам)
- SEO-здоровье (% страниц с meta description, H1, canonical)
- Технические проблемы (битые ссылки, страницы с ошибками)
- Список страниц по решениям (таблица с URL и action)
- Рекомендации по приоритетам переноса
Срок выполнения
Аудит сайта до 1000 страниц с классификацией и отчётом — 3–5 рабочих дней.







