Ditt kalkylark för sökordsspårning säger ”allt ser bra ut”. Google Search Console säger att två (eller fem) olika URL:er slåss om samma sökfråga. Och du får reda på det först efter att rankingen börjar svaja, trafiken dippar eller en kund frågar varför det inte är ”huvudsidan” som visas.
SEO-ansvariga känner av det först eftersom de äger resultatet. Byråägare och inhouse-marknadsförare dras in härnäst, oftast mitt i en sprint. Den här automatiseringen för cannibalization alerts håller övervakningen konstant och diagnosen konsekvent, utan att du behöver bo i Search Console-flikar.
Det här arbetsflödet bevakar ditt Google-kalkylark, hämtar de senaste 30 dagarna från Search Console för upp till fyra sajter, kör en AI-baserad riskbedömning och skriver sedan felfria, kundklara anteckningar tillbaka i arket. Du får se hur det fungerar, vad du behöver och vilka resultat du kan förvänta dig.
Så fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutligt resultat:
n8n Workflow Template: Google Sheets + Search Console: kannibaliseringslarm
flowchart LR
subgraph sg0["Monitor Keywords Sheet for Changes Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Group GSC Data by Keyword (C.."]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Group GSC Data by Keyword (C.."]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Group GSC Data by Keyword (C.."]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Group GSC Data by Keyword (C.."]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge All Client GSC Data"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Match Keywords from Sheet wi.."]
n6@{ icon: "mdi:robot", form: "rounded", label: "Analyze Keyword Cannibalizat..", pos: "b", h: 48 }
n7@{ icon: "mdi:brain", form: "rounded", label: "OpenAI GPT-4o Model", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Parse AI Analysis to Structu..", pos: "b", h: 48 }
n9@{ icon: "mdi:play-circle", form: "rounded", label: "Monitor Keywords Sheet for C..", pos: "b", h: 48 }
n10@{ icon: "mdi:database", form: "rounded", label: "Save Cannibalization Analysi..", pos: "b", h: 48 }
n11@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route to Client 1", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route to Client 2", pos: "b", h: 48 }
n13@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route to Client 3", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route to Client 4", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Fetch Client Website URLs", pos: "b", h: 48 }
n16@{ icon: "mdi:database", form: "rounded", label: "Fetch Target Keywords from S..", pos: "b", h: 48 }
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch GSC Data (Client 1)"]
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter Keywords Found in GSC", pos: "b", h: 48 }
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch GSC Data (Client 2)"]
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch GSC Data (Client 3)"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch GSC Data (Client 4)"]
n11 --> n17
n12 --> n19
n13 --> n20
n14 --> n21
n7 -.-> n6
n15 --> n11
n15 --> n12
n15 --> n13
n15 --> n14
n17 --> n3
n19 --> n0
n20 --> n1
n21 --> n2
n4 --> n5
n18 --> n6
n18 --> n10
n16 --> n4
n9 --> n15
n9 --> n16
n6 --> n10
n3 --> n4
n0 --> n4
n1 --> n4
n2 --> n4
n8 -.-> n6
n5 --> n18
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n9 trigger
class n6,n8 ai
class n7 aiModel
class n11,n12,n13,n14,n18 decision
class n10,n15,n16 database
class n17,n19,n20,n21 api
class n0,n1,n2,n3,n5 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n4,n5,n17,n19,n20,n21 customIcon
Problemet: kannibalisering gömmer sig mitt framför ögonen
Sökordskannibalisering är lurigt eftersom det ser ut som ”täckning”. Du ser att en sökfråga driver exponeringar, men klicken är utspridda över flera URL:er. Rankingen hoppar, CTR sjunker och ingen kan med säkerhet säga vilken sida som ska vinna. Sedan kör du den manuella loopen: exportera Search Console, filtrera på sökfråga, gruppera per sida, jämför positioner och skriv anteckningar som förklarar allt på begripligt språk. Det funkar en gång. Det är brutalt när du gör det varje vecka för flera kunder, med nya sökord som läggs till hela tiden.
Det växer snabbt. Här är var det oftast fallerar.
- Du lägger cirka 30 minuter per sajt bara på att hämta och forma om samma 30-dagarsdata från Search Console.
- Sökord läggs till i spårningsarket, men ingen kommer ihåg att kontrollera om flera URL:er nu rankar på dem.
- När 3–5 sidor konkurrerar blir prioriteringen en åsikt i stället för en repeterbar riskregel.
- Kundanteckningar tar längre tid än analysen eftersom du måste förklara ”varför det här är riskfyllt” varje gång.
Lösningen: AI-driven övervakning av kannibalisering i Sheets
Det här n8n-arbetsflödet gör ditt Google-kalkylark till en levande monitor för kannibalisering. Det börjar med att bevaka arket efter sökordsändringar (varje minut), laddar sedan dina målsökord och de kundsajters URL:er du bryr dig om. Därefter skickar det varje kund genom sin egen Google Search Console API-förfrågan och hämtar en felfri 30-dagarsögonblicksbild: sökfrågor, sidor, positioner, klick, exponeringar och CTR. Arbetsflödet grupperar råresultaten per sökord, stämmer av dem mot sökorden du spårar och filtrerar bort allt som faktiskt inte rankar. Till sist granskar en AI-agent mönstret ”vilka sidor rankar på den här sökfrågan”, tilldelar en risknivå med tydlig motivering och åtgärdsförslag, och skriver tillbaka allt i samma kalkylark.
Arbetsflödet börjar i Google Sheets, så teamet behöver inget nytt verktyg. Search Console-data hämtas och normaliseras för upp till fyra kundsajter, och AI sammanfattar överlappet i konkurrensen. Resultatet hamnar tillbaka i Google Sheets, redo att sorteras, prioriteras och klistras in i en kunduppdatering.
Det här får du: automatisering vs. resultat
| Vad arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du hanterar 4 kundsajter och spårar 50 sökord per sajt. Manuellt tar det ofta runt 2 timmar per sajt att hämta 30-dagars GSC-data, gruppera per sökord och skriva en kort notering, så du tappar större delen av en dag. Med det här arbetsflödet lägger du till eller redigerar sökord i Google-arket, väntar några minuter på GSC-hämtningarna och AI-analysen, och arket fylls med risk, motivering och nästa steg. Du granskar fortfarande rekommendationerna, men det stökiga är redan avklarat.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra spårade sökord och resultat.
- Google Search Console för data om prestanda per sökfråga/sida.
- OpenAI API-nyckel (hämta den från sidan för API-nycklar i din OpenAI-dashboard).
Kunskapsnivå: Medel. Du kopplar Google-inloggningar, lägger till en API-nyckel och matchar dina kolumner i arket mot arbetsflödets fält.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett sökord ändras i Google Sheets. Arbetsflödet körs på en frekvent Google Sheets-trigger, så nya sökord eller ändringar startar automatiskt en uppdaterad kontroll.
Kundsajter skickas till rätt datahämtning. Det laddar dina kund-URL:er och använder sedan enkel styrning av typen ”om detta är kund 1/2/3/4” så att varje property går igenom rätt Search Console-förfrågan.
Search Console-data grupperas till något du kan agera på. HTTP-förfrågningarna hämtar 30 dagars mätvärden, och sedan aggregerar arbetsflödet per sökord och stämmer av resultaten mot din lista över spårade sökord. Saknade sökord kan flaggas och hoppas över, vilket håller utdata strukturerad.
AI sätter risk och skriver noteringen. AI-agenten granskar hur många sidor som konkurrerar och hur stark varje sida är, och levererar sedan strukturerade fält som risknivå, motivering, observationer och åtgärdssteg. De fälten skrivs tillbaka i arket som rader redo för rapportering.
Du kan enkelt justera risktrösklarna så att de matchar hur offensivt teamet vill jobba (till exempel att behandla ”2 sidor i topp 10” som Måttlig i stället för Låg). Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera Google Sheets-triggern
Konfigurera arbetsflödet så att det bevakar ändringar i ert kalkylark för nyckelordsspårning.
- Lägg till noden Keyword Sheet Watcher och ställ in Poll Times på
everyMinute. - Ställ in Document till
https://docs.google.com/spreadsheets/d/[YOUR_ID]/editoch Sheet Name tillKeywords. - Autentiseringsuppgifter krävs: anslut era Google Sheets OAuth2-autentiseringsuppgifter.
- Bekräfta att Keyword Sheet Watcher skickar utdata parallellt till både Retrieve Client URLs och Load Target Keywords.
Keywords och att kalkylarks-id:t matchar det cachade arknamnet för att undvika att triggern inte matchar.
Steg 2: anslut datakällor i Google Sheets
Läs in klient-URL:er och målnyckelord från Google Sheets innan routning och analys.
- Konfigurera Retrieve Client URLs med Document satt till
Client URLsoch Sheet Name satt tillURL. - Konfigurera Load Target Keywords med Document satt till
Client URLsoch Sheet Name satt tillKeywords. - Autentiseringsuppgifter krävs: anslut era Google Sheets OAuth2-autentiseringsuppgifter till både Retrieve Client URLs och Load Target Keywords.
- Verifiera att Retrieve Client URLs skickar utdata parallellt till Client 1 Router, Client 2 Router, Client 3 Router och Client 4 Router.
Client Website i URL-arket. Om den saknas eller heter något annat kommer routrarna aldrig att matcha.
Steg 3: konfigurera klientroutning och GSC-anrop
Routa varje klient till rätt Google Search Console-anrop och hämta data för query/sida.
- I Client 1 Router ställer ni in villkoret Left Value till
{{$json['Client Website'].trimStart().trimEnd()}}och Right Value tillhttps://client-one.example/. - I Client 2 Router ställer ni in villkoret Right Value till
client-two.exampleoch använder{{$json['Client Website'].trimStart().trimEnd()}}som vänstervärde. - I Client 3 Router och Client 4 Router ställer ni in Right Value till
https://client-three.example/respektivehttps://client-four.example/. - För alla fyra noderna GSC Request Client 1–GSC Request Client 4 ställer ni in Method till
POSToch JSON Body till{ "startDate": "{{ $now.minus(30, 'days').format('yyyy-MM-dd') }}", "endDate": "{{ $now.format('yyyy-MM-dd') }}", "dimensions": ["query", "page"] }. - Autentiseringsuppgifter krävs: anslut era Google OAuth2 API-autentiseringsuppgifter till alla fyra GSC-anropsnoder.
Steg 4: aggregera och stäm av nyckelordsdata
Kombinera GSC-resultat med listan över målnyckelord och ta bort saknade poster.
- Låt JavaScript-logiken vara oförändrad i Aggregate Keywords C1, Aggregate Keywords C2, Aggregate Keywords C3 och Aggregate Keywords C4 för att gruppera nyckelord per URL med CTR, klick, visningar och position.
- Ställ in Combine All GSC Inputs till Number Inputs
5för att slå ihop alla fyra klientaggregat plus Load Target Keywords. - Lämna koden i Reconcile Sheet Keywords som den är för att matcha arkets nyckelord mot GSC-data och flagga saknade nyckelord med
not_found_in_gsc. - I Exclude Missing Keywords ställer ni in villkoret Left Value till
{{$json.status}}och Right Value tillnot_found_in_gscmed operatorn notEquals.
Steg 5: konfigurera AI-analys av kannibalisering
Analysera risk för kannibalisering med AI-agenten och strukturerad output.
- I Cannibalization Risk Analyst behåller ni prompten i Text med uttrycken
{{$json.keyword}}och{{ JSON.stringify($json.urls) }}. - Ställ in OpenAI Chat Model till modellen
gpt-4ooch anslut den som språkmodell för Cannibalization Risk Analyst. - Behåll JSON-schemat för Structured Output Parser som angivet för att säkerställa strukturerad output.
- Autentiseringsuppgifter krävs: anslut era OpenAI API-autentiseringsuppgifter till OpenAI Chat Model (inte till parsern).
Steg 6: konfigurera output till Google Sheets
Skriv tillbaka analysresultaten till ert dataark med logik för append/update.
- I Write Analysis to Sheet ställer ni in Operation till
appendOrUpdateoch väljer Sheet Namedata. - Mappa kolumnerna exakt enligt definitionen, inklusive Data satt till
{{$json.output['URLs for Keyword'].map(i => `${i.url} | Position: ${i.position} | Clicks: ${i.clicks} | Impressions: ${i.impressions} | CTR: ${i.ctr}`).join('\n')}}. - Ställ in Date till
{{$now.format('yyyy-MM-dd')}}och Status till{{$('Reconcile Sheet Keywords').item.json.status}}. - Autentiseringsuppgifter krävs: anslut era Google Sheets OAuth2-autentiseringsuppgifter till Write Analysis to Sheet.
Steg 7: testa och aktivera ert arbetsflöde
Validera arbetsflödet end-to-end innan ni aktiverar det för kontinuerlig övervakning.
- Använd Execute Workflow för att köra ett manuellt test med en exempelrad i arket
Keywords. - Bekräfta att Keyword Sheet Watcher triggar och att både Retrieve Client URLs och Load Target Keywords körs parallellt.
- Verifiera att Write Analysis to Sheet skriver strukturerade resultat, inklusive Risk Level, Summary och Target page.
- Slå på arbetsflödet som Active för att starta kontinuerlig övervakning.
Vanliga fallgropar
- Google Search Console-inloggningar kan löpa ut eller sakna åtkomst till en specifik property. Om det skapar fel, kontrollera Google-anslutningen i n8n och bekräfta att kontot har åtkomst till varje sajt i Search Console.
- Om du använder Wait-noder eller träffar Search Console API under perioder med hög belastning varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet och önskat rekommendationsformat tidigt, annars kommer du att redigera utdata för alltid.
Vanliga frågor
Cirka en timme om dina Google-konton är redo.
Nej. Du kopplar främst konton och mappar dina kolumner i Google-arket. Arbetsflödets logik är redan byggd; du konfigurerar det för dina kunder.
Ja. n8n har ett gratisalternativ för egen hosting och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in kostnader för OpenAI API, som oftast är några cent per körning beroende på hur många sökord du analyserar.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger obegränsat antal körningar men kräver grundläggande serverhantering.
Ja, men du behöver duplicera kundstyrningen och Search Console-förfrågningsvägen. I praktiken lägger du till en gren till i ”kundrouter”, en till HTTP-förfrågan för den propertyn och en till aggregeringsväg innan allt slås ihop. Många team anpassar också AI-utdata så att den matchar deras ticket-mall, till exempel ”rekommenderad kanonisk URL”, ”sidor att slå ihop” och ”interna länkar att uppdatera”.
Oftast beror det på utgångna Google-inloggningar eller att det anslutna kontot saknar åtkomst till någon av properties. Återanslut Google i n8n och dubbelkolla att exakt URL för Search Console-propertyn matchar det som arbetsflödet begär. Rate limiting kan också dyka upp om du hämtar många sökfrågor över flera sajter samtidigt, så det hjälper att sprida ut körningarna lite.
I n8n Cloud Starter begränsas du av antal körningar per månad, inte av antal sökord, så den praktiska gränsen beror på hur ofta arket ändras. Om du kör egen hosting finns ingen körningsgräns; då handlar det mest om din server och att Search Console API svarar snabbt. För många små team är några hundra sökord över en handfull sajter inga problem. Om du spårar tusentals vill du minska hur ofta det körs och batcha sökorden mer noggrant.
Ofta, ja. Det här arbetsflödet använder förgrening per kund, sammanslagning av flöden och strukturerad AI-utdata, vilket tenderar att bli krångligt eller dyrt i Zapier-liknande automatiseringar med ”en väg”. n8n ger dig dessutom möjligheten till egen hosting, vilket är en stor fördel om du kör kontroller ofta. Om du bara behöver ett enkelt flöde som ”skicka mig ett meddelande när rankingen förändras” kan Zapier eller Make gå snabbare att sätta upp. Om du är osäker, prata med en automationsexpert och beskriv din rapporteringskadens och sökordsvolym.
När detta väl är igång slutar kannibalisering att vara en överraskning och blir en sorteringsbar lista. Arbetsflödet sköter den repetitiva kontrollen. Du fattar besluten som faktiskt flyttar rankingen.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.