Аналіз та устранення каннібалізації ключових слів
Каннібалізація виникає коли кілька сторінок конкурують за один поисковий запит. Google бачить дві релевантні сторінки, не знає яку ранжирувати вище, і в результаті понижує обидві. Проблема найгірше проявляється на великих сайтах: інтернет-магазинах з сотнями категорій, корпоративних порталах з історією правок, блогах з накопленою базою статей.
Виявлення каннібалізації
Через Google Search Console:
Performance звіт → Pages. Вивести таблицю кліків/показів. Повторити по Queries. Поєднати дві таблиці в Python: шукати запити де impressions розподілені між 2+ URL.
import pandas as pd
pages_df = pd.read_csv('gsc_pages.csv')
queries_df = pd.read_csv('gsc_queries.csv')
from googleapiclient.discovery import build
service = build('searchconsole', 'v1', credentials=creds)
response = service.searchanalytics().query(
siteUrl='https://example.com',
body={
'startDate': '2024-01-01',
'endDate': '2024-03-31',
'dimensions': ['query', 'page'],
'rowLimit': 25000
}
).execute()
rows = response.get('rows', [])
df = pd.DataFrame([{
'query': r['keys'][0],
'page': r['keys'][1],
'clicks': r['clicks'],
'impressions': r['impressions'],
'position': r['position']
} for r in rows])
# Знайти запити з кількома конкуруючими сторінками
cannibal = df.groupby('query').filter(lambda g: len(g) > 1 and g['impressions'].sum() > 100)
cannibal_sorted = cannibal.sort_values(['query', 'impressions'], ascending=[True, False])
Через Screaming Frog + Ahrefs:
Ahrefs: Site Explorer → Pages → Best by Links → експорт. Screaming Frog з Custom Extraction для <title> та <h1>. Шукати сторінки з однаковими або подібними titles.
Класифікація випадків
Тип 1: Явний дубль. Дві сторінки з одинаковим контентом і одинаковими ключами. Рішення: canonical або 301 редирект.
Тип 2: Семантичне перетинання. Сторінка категорії та стаття блогу конкурують за інформаційний запит. Рішення: переробка контенту, розмежування інтенту.
Тип 3: Історичний мусор. Старі сторінки пагінації, архіви тегів, застарілі лендинги. Рішення: noindex або 410.
Тип 4: Планова каннібалізація. На одному запиті спеціально існують landing + blog post — помилка архітектури контент-стратегії. Рішення: слияние або переорієнтація.
Технічні методи устранення
301 редирект (Apache/Nginx):
# nginx.conf
server {
location = /old-page/ {
return 301 /canonical-page/;
}
}
Canonical tag:
Коли сторінки повинні залишатися доступними але вага потребує консолідації:
<!-- На /product-category/?page=2 -->
<link rel="canonical" href="https://example.com/product-category/" />
Noindex для сторінок з низькою ціністю:
<meta name="robots" content="noindex, follow" />
Або через HTTP-заголовок:
X-Robots-Tag: noindex, follow
Слияние сторінок: Коли каннібалізуються дві сильні сторінки з різними ссилочними профілями — 301 буде втратою. Правильніше: об'єднати контент в одну вичерпну сторінку, поставити 301 з більш слабої, перераспределити внутрішні посилання.
Аудит внутрішної перелинківки
Аудит анкорів через Screaming Frog: Configuration → Custom → Extract → вибрати всі <a href> з потрібними ключами.
Правило: один комерційний анкор повинен ссилатися тільки на одну сторінку на всьому сайті.
Після виправлень: відстеження
Google оновлює позиції через 2–6 тижнів після індексації змін. Прискорюємо:
Google Search Console → URL Inspection → Request Indexing
Для пакетної переіндексації — Indexing API:
from googleapiclient.discovery import build
service = build('indexing', 'v3', credentials=creds)
batch = service.new_batch_http_request()
urls_to_notify = ['https://example.com/canonical-page/']
for url in urls_to_notify:
batch.add(service.urlNotifications().publish(
body={'url': url, 'type': 'URL_UPDATED'}
))
batch.execute()
Терміни
Аудит сайту до 1000 сторінок — 3–5 робочих днів: краулинг, експорт GSC, аналіз, складання карти каннібалізації. Реалізація технічних правок (canonical, редиректи, noindex) — 2–3 дні. Контентні правки (переписування, слияние) — 5+ днів у залежності від обсягу.







