Реалізація аудиту існуючого контенту перед міграцією
Аудит контенту — інвентаризація та аналіз всіх матеріалів на поточному сайті перед перенесенням на нову платформу. Дозволяє зрозуміти, що переносити, що оновлювати, а що видалити.
Завдання аудиту
- Скласти повний список 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 робочих днів.







