---
title: Märksõnade kattuvus
description: Tuvastab blogipostitused, mis konkureerivad samade märksõnade pärast.
category: Marketing
sublabel: Sisu
author: AgriciDaniel
tags: 
license: MIT
source: https://github.com/AgriciDaniel/claude-blog
---

# Blogi kannibaliseerimine - märksõnade kattumise tuvastamine

Tuvasta, millal mitu blogipostitust võistlevad samade otsingumärksõnade pärast. Kaks režiimi:
ainult-kohalik analüüs (vaikimisi) ja DataForSEO API režiim SERP-tasemel andmete jaoks.

## Kaks režiimi

| Režiim | Lipp | Kulu | Andmeallikas |
|------|------|------|-------------|
| Kohalik | (vaikimisi) | Tasuta | Faili sisu analüüs Grep/Read kaudu |
| API | `--api` | ~0,01 $/kõne | DataForSEO Page Intersection + Ranked Keywords |

Kohalik režiim töötab ilma mis tahes API-võtmeteta. API-režiim nõuab DataForSEO mandaate,
mis on seatud keskkonnamuutujatena: `DATAFORSEO_LOGIN` ja `DATAFORSEO_PASSWORD`.

## Kohaliku režiimi töövoog

### 1. samm: skanni blogifailid

Kasuta Glob'i, et leida sihtkataloogis kõik sisufailid:
- Mustrid: `**/*.md`, `**/*.mdx`, `**/*.html`
- Jäta vahele failid kaustades `node_modules/`, `.git/`, `drafts/`

### 2. samm: ekstrahhi peamised märksõnad

Iga faili puhul loe ja ekstrahhi märksõnasignaalid järgmistest:
- **Pealkirjasilt** või H1 pealkiri (kõrgeim kaal)
- **H2 pealkirjad** (keskmine kaal)
- **Esimene lõik** (toetav signaal)
- **Metakirjeldus**, kui olemas frontmatter'is

Peamise märksõna ekstraheerimise meetod:
1. Tokeniseeri pealkiri, H1, H2-d, metakirjeldus ja esimene lõik 1-gramm-,
   2-gramm- ja 3-gramm-fraasideks.
2. Normaliseeri deterministlikult: väiketähed, eemalda lokaaditeadlikud stoppsõnad,
   lemmatiseeri või tüveta järjekindlalt, säilita tootenimed ja hoia kavatsuse
   modifikaatorid nagu „best“, „pricing“, „vs“, „review“, „template“ ja aasta.
3. Skoori sektsioonid eraldi: pealkiri/H1 kõrgeim, metakirjeldus ja H2-d keskmine,
   esimene lõik toetav.
4. Vali kõrgeima skooriga 2-3-sõnaline fraas peamiseks märksõnaks ja registreeri
   teisesed märksõnad H2 pealkirjadest.

### 3. samm: klasterda sarnasuse järgi

Rühmita postitused klastritesse nende vastereeglite abil (prioriteedijärjekorras):

1. **Täpne vaste** - identne peamine märksõna 2+ postituse lõikes
2. **Tüvevaste** - sama juursõna (nt „optimize“ vs „optimization“)
3. **Semantiline kattumine** - määra selged kavatsusesildid nagu informatiivne,
   kommertsiaalne, tehinguline, võrdlus või tõrkeotsing. Kaasa kindlus
   ja ühelauseline põhjendus või kasuta vektorvastendite (embeddings) töövoogu dokumenteeritud
   lävega.
4. **Alamhulga vaste** - üks märksõna sisaldab teist (nt „email marketing“
   vs „email marketing for startups“)

### 4. samm: skoori ja märgi

Iga klastri puhul, kus on 2+ postitust, hinda raskusastet ja loo soovitus.

### 5. samm: väljasta raport

Kuva tulemuste tabel ja klastripõhised soovitused.

## API-režiimi töövoog (DataForSEO)

Nõuab `--api` lippu ja spetsiaalset kohalikku CLI-mähist, mis loeb
`DATAFORSEO_LOGIN` ja `DATAFORSEO_PASSWORD` keskkonnast ja väljastab
JSON-i. Ära kasuta DataForSEO POST-kõnede jaoks WebFetch'i ja ära kunagi avalda Basic-auth
päiseid, sisselogimist, parooli ega kodeeritud mandaate päringutes või raportites. Kui projektis
mähist pole, raporteeri `SKIPPED: DataForSEO wrapper unavailable`
ja jooksuta kohalik režiim.

### Kasutatud lõpp-punktid

**Page Intersection** - leia märksõnad, kus mitu URL-i asetsevad:
```
POST https://api.dataforseo.com/v3/dataforseo_labs/google/page_intersection/live

{
  "pages": {
    "1": "https://example.com/post-a",
    "2": "https://example.com/post-b"
  },
  "language_code": "en",
  "location_code": 2840
}
```

Kulu: ~0,01 $ kõne kohta. Tagastab kattuvad märksõnad koos positsiooni, mahu, CPC-ga.

**Ranked Keywords** - hangi kõik märksõnad, mille järgi üksainus URL asetseb:
```
POST https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live

{
  "target": "https://example.com/post-a",
  "language_code": "en",
  "location_code": 2840
}
```

Mähis saadab DataForSEO auth-päised keskkonnamuutujatest ja ei prindi neid
kunagi.

### API-analüüsi sammud

1. Kogu kasutajalt (või saidikaardist) kõik avaldatud URL-id
2. Jooksuta Ranked Keywords iga URL-i jaoks, et ehitada märksõnaprofiilid
3. Jooksuta Page Intersection URL-ipaaride jaoks, mis jagavad märksõnaklastreid
4. Arvuta raskusaste alloleva valemi abil
5. Väljasta rikastatud raport otsingumahu ja positsiooniandmetega

## Raskusastme skoorimine

Neli raskusastet kattumissignaalide põhjal:

| Tase | Kriteeriumid | Tegevuse kiireloomulisus |
|-------|----------|----------------|
| Kriitiline | Sama täpne märksõna, mõlemad lehed top 20-s | Kohe |
| Kõrge | Sama märksõnaklaster, üks leht asetseb teisest kõrgemal | Sel nädalal |
| Keskmine | Seotud märksõnad osalise SERP-kattumisega | Sel kuul |
| Madal | Semantiline sarnasus, aga erinevad kinnitatud kavatsused | Jälgi |

### Raskusastme valem (API-režiim)

```
severity_score = overlap_count x avg_search_volume x (1 / position_gap)
```

Kus:
- `overlap_count` = jagatud asetsevate märksõnade arv
- `avg_search_volume` = jagatud märksõnade keskmine kuumaht
- `position_gap` = keskmise asetuspositsiooni absoluutne erinevus (min 1)

Kõrgem skoor = kiireloomulisem kannibaliseerimisprobleem.

### Raskusastme heuristika (kohalik režiim)

Ilma SERP-andmeteta kasuta lihtsustatud skoorimist:
- **Kriitiline**: täpne peamise märksõna vaste postituste vahel
- **Kõrge**: tüvevaste peamisel märksõnal või 3+ jagatud H2 märksõna
- **Keskmine**: semantiline kattumine peamisel märksõnal
- **Madal**: ainult alamhulga vaste või jagatud teisesed märksõnad

## Väljundvorming

### Kokkuvõttetabel

```
| Post A | Post B | Shared Keywords | Severity | Recommendation |
|--------|--------|-----------------|----------|----------------|
| /best-crm-tools | /top-crm-software | best crm, crm tools, crm software | Critical | MERGE |
| /email-tips | /email-marketing-guide | email marketing | High | DIFFERENTIATE |
| /seo-basics | /seo-for-beginners | seo basics, beginner seo | Critical | CANONICAL |
| /react-hooks | /react-state-mgmt | react, state | Low | NO ACTION |
```

### Klastripõhine detail

Iga märgitud klastri puhul esita:
- Mõlema postituse pealkirjad ja URL-id
- Kattuvate märksõnade täisnimekiri (mahuga, kui API-režiim)
- Kumb postitus on tugevam (põhjalikum, paremini struktureeritud)
- Konkreetne soovitus koos põhjendusega

## Soovitused

Neli võimalikku tegevust iga kannibaliseerimisklastri jaoks:

### MERGE

Kui mõlemad lehed on õhukesed või katavad sama kavatsust sarnase sügavusega.
- Ühenda mõlema parim sisu üheks põhjalikuks postituseks
- 301 ümbersuunamine nõrgemalt URL-ilt ühendatud postitusele
- Säilita kõik sisemised lingid, mis osutavad kummalegi URL-ile

### DIFFERENTIATE

Kui lehed teenivad erinevaid kavatsusi, aga märksõnade sihtimine kattub.
- Nihuta nõrgema postituse peamine märksõna seotud pika saba suunas
- Uuenda pealkiri, H1 ja metakirjeldus, et peegeldada uut fookust
- Lisa kahe postituse vahele sisemised lingid, et anda märku eri teemadest

### CANONICAL

Kui üks postitus on selgelt autoriteet ja teine vähemtähtis duplikaat.
- Lisa `rel="canonical"` nõrgemale lehele, osutades autoriteedile
- Ära ühenda kanoonilist ja noindexit hooletult. Kasuta noindexit ainult siis, kui eemaldamine
  otsingust on kavatsetud
- Lingi nõrgemalt lehelt autoriteedilehele

### NOINDEX

Kui leht tuleks otsingutulemustest eemaldada, kuid see peaks kasutajate jaoks siiski eksisteerima.
- Kinnita, et lehel pole mõttekat unikaalset otsingunõudlust ega äriväärtust
- Hoia see indekseeritav, kuni noindex-direktiiv on täheldatud
- Ära kasuta vaikimisi dubleeriva sisu parandusena

### NO ACTION

Kui kavatsus on tõeliselt erinev hoolimata pindmisest märksõnasarnasusest.
- Dokumenteeri põhjendus tulevaste auditite jaoks
- Jälgi asetusi kord kvartalis võimalike positsioonimuutuste suhtes
- Hinda uuesti, kui kumbki postitus asetustes langeb

## Vigade käsitlemine

- **Blogifaile ei leitud**: kui kataloog ei sisalda .md-, .mdx- ega .html-faile, raporteeri „No blog files found in [directory]“ ja soovita teed üle kontrollida
- **DataForSEO mandaadid puuduvad**: API-režiimis, kui mandaate pole seadistatud, taandu automaatselt kohalikule režiimile ja teavita kasutajat
- **API kiiruspiirangud**: DataForSEO-l on minutipõhised kiiruspiirangud. Kui saadakse 429-vastus, oota ja proovi üks kord uuesti. Kui see püsib, lülitu järelejäänud URL-ide jaoks kohalikule režiimile
- **API-päringu tõrked**: kui DataForSEO tagastab vea, proovi üks kord uuesti kiiruspiirangute
  piires. Kui see ikka ebaõnnestub, lülitu järelejäänud URL-ide jaoks kohalikule režiimile ja
  raporteeri ebaõnnestunud lõpp-punkt ilma mandaatideta
- **Üheainsa postitusega kataloog**: kui olemas on ainult üks blogipostitus, raporteeri „Cannibalization analysis requires at least 2 posts“ ja välju sujuvalt