Din SEO-researchprocess ser förmodligen ut så här: du tar en lista med URL:er, öppnar dem en och en, skummar rubriker, gissar ämnet och försöker sedan gruppera sidor i kluster utan att missa något. Det går långsamt. Och ärligt talat är det den typen av arbete som dränerar hjärnan innan du ens kommer till strategin.
Innehållsstrateger känner det när en ”snabb audit” blir ett tvådagars kalkylblads-maraton. SEO-ansvariga känner det när klustringsstandarder skiljer sig från person till person. Byråteam känner det också. Den här automatiseringen av SEO-klustring gör om ett vanligt Google Sheet med URL:er till konsekventa entiteter, nyckelord, sammanfattningar och klusteretiketter du kan agera på.
Nedan ser du vad arbetsflödet gör, vilka resultat du kan förvänta dig och de praktiska detaljerna som gör det pålitligt vecka efter vecka.
Så fungerar automatiseringen
Hela n8n-arbetsflödet, från trigger till slutligt output:
n8n Workflow Template: Google Sheets + OpenAI: SEO-kluster klara åt dig
flowchart LR
subgraph sg0["Weekly Schedule Flow"]
direction LR
n0@{ icon: "mdi:database", form: "rounded", label: "Fetch URL List from Google S..", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split URLs In Batches", pos: "b", h: 48 }
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch HTML from URL"]
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/html.dark.svg' width='40' height='40' /></div><br/>Extract Headings (H1-H6)"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Sheet Update", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Update Sheet Row", pos: "b", h: 48 }
n6@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n7@{ icon: "mdi:memory", form: "rounded", label: "Memory Buffer", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Structured JSON Parser", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "AI Agent - Extract Entities ..", pos: "b", h: 48 }
n10@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model for Cluste..", pos: "b", h: 48 }
n11@{ icon: "mdi:memory", form: "rounded", label: "Memory Buffer for Clustering", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Cluster JSON Parser", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "AI Agent - Assign Topic Clus..", pos: "b", h: 48 }
n14@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Extracted Data", pos: "b", h: 48 }
n15@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Cluster Data", pos: "b", h: 48 }
n16@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model for Links", pos: "b", h: 48 }
n17@{ icon: "mdi:memory", form: "rounded", label: "Memory Buffer for Links", pos: "b", h: 48 }
n18@{ icon: "mdi:robot", form: "rounded", label: "Link Suggestions JSON Parser", pos: "b", h: 48 }
n19@{ icon: "mdi:play-circle", form: "rounded", label: "Weekly Schedule Trigger", pos: "b", h: 48 }
n20@{ icon: "mdi:robot", form: "rounded", label: "AI Agent - Generate Internal..", pos: "b", h: 48 }
n7 -.-> n9
n5 --> n1
n6 -.-> n9
n12 -.-> n13
n2 --> n3
n15 --> n20
n4 --> n5
n14 --> n13
n1 --> n2
n8 -.-> n9
n17 -.-> n20
n19 --> n0
n3 --> n9
n16 -.-> n20
n18 -.-> n20
n11 -.-> n13
n13 --> n15
n10 -.-> n13
n0 --> n1
n20 --> n4
n9 --> n14
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 n19 trigger
class n8,n9,n12,n13,n18,n20 ai
class n6,n10,n16 aiModel
class n7,n11,n17 ai
class n0,n5 database
class n2 api
classDef customIcon fill:none,stroke:none
class n2,n3 customIcon
Problemet: SEO-klustring tar evigheter (och blir ändå rörig)
Ämnesklustring låter enkelt tills du faktiskt gör det i skala. Du hanterar dussintals (ibland hundratals) sidor, var och en med sin egen struktur, formulering och intent. Manuell granskning blir till oändligt flikväxlande: kopiera H1:or, skanna H2:or, klistra in anteckningar och sedan diskutera internt om vad det ”riktiga” ämnet är. Även om du gör jobbet noggrant är resultatet ofta inte konsekvent nog för att styra internlänkning eller innehållsrensning, vilket gör att auditen inte leder till åtgärder. Den blir bara ännu ett kalkylblad som ingen litar på.
Friktionen bygger på. Och kostnaden är inte bara tid.
- Folk tolkar ämnen olika, så kluster förändras beroende på vem som gör auditen den veckan.
- Manuell skrapning av rubriker är monotont, vilket gör att du missar signaler som gömmer sig i underrubriker.
- Idéer för internlänkning landar som ett luddigt ”länka relaterade inlägg”, inte en lista du faktiskt kan implementera.
- Backloggen växer eftersom granskning av 100 URL:er lätt kan sluka större delen av en dag.
Lösningen: Veckovis URL-analys som skriver tillbaka strukturerade kluster till ditt sheet
Det här n8n-arbetsflödet tar en lista med URL:er från Google Sheets och kör samma analys varje gång, utan att någon manuellt behöver öppna varje sida. Med ett veckoschema hämtar det dina URL-rader, laddar HTML för varje sida och extraherar sidans rubriker (H1 till H6) för att fånga den faktiska strukturen i innehållet. Därefter omvandlar OpenAI (GPT-4o-mini via LangChain-noder) rubrikerna till strukturerade fält: titel, entiteter, nyckelord, ämnen och en lättläst sammanfattning. Sedan klassificerar arbetsflödet varje sida i ett övergripande kluster och ett mer specifikt underkluster. Slutligen genererar det 3–5 förslag på internlänkning och skriver tillbaka allt till ditt ursprungliga Google Sheet med statusflaggor så att du ser vad som är klart och vad som behöver åtgärdas.
Arbetsflödet börjar med en schemalagd hämtning från Google Sheets. Det bearbetar URL:er i batchar så att du inte överbelastar externa tjänster. Efter att OpenAI har genererat den strukturerade datan och klusteretiketterna uppdateras arket rad för rad, så att din research alltid finns på ett ställe.
Det här får du: Automatisering vs. resultat
| Det här automatiserar arbetsflödet | Resultat du får |
|---|---|
|
|
Exempel: Så här ser det ut i praktiken
Säg att du auditar 80 URL:er varje måndag. Manuellt kan även en ”snabb genomgång” ta 10 minuter per sida för att öppna den, skanna rubriker, notera entiteter och välja kluster, vilket blir cirka 13 timmar. Med det här arbetsflödet lägger du in URL:erna i Google Sheets en gång, och sedan hanterar den veckovisa körningen hämtning och analys automatiskt. Du kan lägga 45 minuter på att skumma output och stickprova avvikare, och sedan gå direkt till uppdatering av internlänkar och beslut om innehåll.
Det du behöver
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för URL-input och resultat-output
- OpenAI för att extrahera entiteter, ämnen och kluster
- OpenAI API-nyckel (hämta den i din OpenAI-dashboard)
Kunskapsnivå: Mellannivå. Du kopplar konton, mappar några kolumner i sheetet och granskar prompts, men du behöver inte skriva kod.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
Ett veckoschema sätter igång det. n8n startar enligt en fast kadens (veckovis), så att din research uppdateras även när ingen kommer ihåg att köra den.
Ditt sheet blir din källa till sanning. Arbetsflödet hämtar URL-rader från Google Sheets och itererar dem i batchar så att du kan skala utan att belasta webbplatser eller OpenAI API:t.
Rubriker extraheras och analyseras sedan av OpenAI. Varje sida hämtas via HTTP, rubriker (H1–H6) parsas och en AI-agent genererar strukturerade fält som entiteter, nyckelord, ämnen och en kort sammanfattning som faktiskt går att läsa.
Kluster och internlänksidéer läggs till automatiskt. En andra AI-pass tilldelar kluster- och underklusteretiketter, och en tredje pass rekommenderar 3–5 mål för internlänkning för att stärka ämnesauktoritet.
Du kan enkelt justera klustringsreglerna så att de matchar din taxonomi (eller byta ut sheetet mot Excel 365) utifrån dina behov. Se hela implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera den schemalagda triggern
Konfigurera det veckoschema som startar pipelinen och hämtar URL-data för bearbetning.
- Lägg till noden Scheduled Weekly Start och öppna dess inställningar.
- Ställ in regelintervallet till weekly med triggerAtDay satt till
1(måndag). - Bekräfta att körflödet börjar med Scheduled Weekly Start → Retrieve Sheet URLs.
Steg 2: Anslut Google Sheets
Hämta URL:er från ett Google Sheet och skriv senare tillbaka enrichad data till samma ark.
- Öppna Retrieve Sheet URLs och välj målarket: Document-värde
[YOUR_ID]och Sheet NameURL Data. - Inloggningsuppgifter krävs: Anslut era
googleSheetsOAuth2Api-inloggningsuppgifter i Retrieve Sheet URLs. - Konfigurera Write Back to Sheet att använda Operation
appendOrUpdate, Document[YOUR_ID]och Sheet NameURL Data. - Säkerställ att Write Back to Sheet är inställd på att automatiskt mappa indata med Matching Columns som inkluderar
URL. - Inloggningsuppgifter krävs: Anslut era
googleSheetsOAuth2Api-inloggningsuppgifter i Write Back to Sheet.
URL inte ingår i matchande kolumner kan uppdateringar lägga till dubbla rader i stället för att uppdatera befintliga.Steg 3: Sätt upp hämtning och parsning av webbsidor
Iterera över URL:er, hämta HTML och extrahera rubriker för AI-bearbetning längre fram.
- I Batch URL Iterator, behåll standardinställningarna för batch och bekräfta flödet: Retrieve Sheet URLs → Batch URL Iterator.
- I Request Page HTML, ställ in URL till
={{$json["URL"]}}. - I Parse Heading Tags, behåll Operation som
extractHtmlContentoch verifiera selektorerna förh1,h2,h3,h4,h5ochh6. - Bekräfta flödet: Request Page HTML → Parse Heading Tags → AI Extract Entities.
Steg 4: Konfigurera AI-extraktion, klustring och länkrekommendationer
Använd tre AI-agenter för att extrahera entiteter, tilldela kluster och föreslå interna länkar, var och en med sin egen modell- och parserkedja.
- I AI Extract Entities, behåll prompttexten och bekräfta att den använder rubrikerna och URL:en med uttryck som
{{$json["URL"]}},{{$json["h1"]}},{{$json["h2_list"]}}och{{$json["h3_list"]}}. - Säkerställ att OpenAI Chat Engine är ansluten som språkmodell för AI Extract Entities och att Structured Output Parser är ansluten som output parser.
- Inloggningsuppgifter krävs: Anslut era
openAiApi-inloggningsuppgifter i OpenAI Chat Engine. - I Map Extracted Fields, ställ in tilldelningar med uttryck:
={{ $json.output.title }},={{ $json.output.entities }},={{ $json.output.keywords }},={{ $json.output.topics }}och={{ $json.output.summary }}. - I AI Assign Clusters, behåll prompten och bekräfta URL-referensen till
{{ $('Batch URL Iterator').item.json.URL }}. - Säkerställ att OpenAI Cluster Model är ansluten som språkmodell för AI Assign Clusters och att Cluster Output Parser är ansluten som output parser.
- Inloggningsuppgifter krävs: Anslut era
openAiApi-inloggningsuppgifter i OpenAI Cluster Model. - I Map Cluster Fields, ställ in tilldelningar till
={{ $json.output.cluster }}och={{ $json.output.subcluster }}. - I AI Suggest Links, behåll prompttexten och bekräfta referenser till
{{ $('Batch URL Iterator').item.json.URL }},{{$json["cluster"]}},{{$json["subcluster"]}},{{ $('Map Extracted Fields').item.json.entities }}och{{$items("Retrieve Sheet URLs").map(i => i.json.URL)}}. - Säkerställ att OpenAI Link Model är ansluten som språkmodell för AI Suggest Links och att Link Output Parser är ansluten som output parser.
- Inloggningsuppgifter krävs: Anslut era
openAiApi-inloggningsuppgifter i OpenAI Link Model.
Steg 5: Konfigurera output till Google Sheets
Sätt ihop de enrichade fälten och skriv tillbaka till källarket, och loopa sedan till nästa URL-batch.
- I Assemble Sheet Update, ställ in tilldelningar med uttryck:
={{ $('Map Extracted Fields').item.json.title }},={{ $('Map Extracted Fields').item.json.entities }},={{ $('Map Extracted Fields').item.json.keywords }},={{ $('Map Extracted Fields').item.json.summary }},={{ $('Map Cluster Fields').item.json.cluster }},={{ $('Map Cluster Fields').item.json.subcluster }},={{ $json.output.suggestions }},processedoch={{ $('Batch URL Iterator').item.json.URL }}. - Bekräfta flödet: AI Suggest Links → Assemble Sheet Update → Write Back to Sheet.
- Verifiera loopen: Write Back to Sheet skickar output till Batch URL Iterator för att fortsätta bearbeta återstående URL:er.
Steg 6: Testa och aktivera ert arbetsflöde
Kör ett manuellt test för att verifiera pipelinen och aktivera sedan veckoschemat.
- Klicka på Execute Workflow för att köra ett manuellt test från Scheduled Weekly Start.
- Bekräfta att Request Page HTML returnerar HTML, att Parse Heading Tags extraherar rubriker och att AI-noderna returnerar giltig JSON.
- Kontrollera ert Google Sheet för att verifiera uppdaterade kolumner:
title,entities,keywords,summary,cluster,subcluster,internal_link_suggestionsochstatus. - När ni är nöjda, slå på arbetsflödet Active för att aktivera veckovis bearbetning.
Vanliga fallgropar
- Google Sheets-inloggningar kan gå ut eller kräva specifika behörigheter. Om saker slutar fungera, kontrollera först panelen för n8n Credentials och Google-kontots appåtkomst.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstider. Öka väntetiden om noder längre fram fallerar på tomma svar.
- OpenAI-prompts som lämnas ”default” ger intetsägande kluster. Lägg in webbplatsens kategorier, exempel och varumärkesspråk tidigt, eftersom det är tungt att rätta output i efterhand.
Vanliga frågor
Cirka en timme om ditt Sheet redan är organiserat.
Nej. Du kopplar främst konton och mappar rätt kolumner i Google Sheets så att arbetsflödet vet var det ska läsa och skriva.
Ja. n8n har ett gratis self-hosted-alternativ 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:t (ofta bara några dollar per större audit, beroende på hur många URL:er du kör).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, men räkna med att justera prompts. De snabbaste vinsterna är att anpassa instruktionerna för AI-extraktion och klustring så att klusternamn matchar dina kategorier, och sedan skärpa prompten för ”föreslå länkar” så att den bara rekommenderar URL:er från samma underkluster. Du kan också ändra Google Sheets-kolumnerna i Set/Map-stegen så att outputen passar ditt befintliga audit-sheet. Om dina URL:er kräver inloggning behöver du byta HTTP-hämtningsmetod mot en autentiserad hämtning.
Oftast beror det på utgången OAuth-åtkomst eller att fel Google-konto är kopplat i n8n. Återanslut Google Sheets-inloggningen och bekräfta sedan att kalkylblads-ID och bladflikens namn fortfarande stämmer. Kontrollera också delningsbehörigheter på själva sheetet, särskilt om det kopierades från en kunds workspace. Om fel uppstår mitt i en körning kan rate limits vara en faktor, så batchning och en kort väntan kan stabilisera det.
Hundratals per körning är normalt.
För det här användningsfallet är n8n oftast bättre eftersom du gör bearbetning i flera steg (hämta HTML, parsa rubriker, köra flera AI-pass och sedan skriva strukturerade resultat tillbaka). Zapier och Make kan lösa delar av det, men logiken blir snabbt klumpig och du känner av kostnaden när du skalar. n8n ger dig också möjligheten att self-hosta, vilket är en stor fördel om du kör stora auditer varje vecka. Nackdelen är uppsättningen: du lägger lite mer tid på att få prompts och mappingar rätt. Om du vill ha en second opinion innan du bestämmer dig, prata med en automationsexpert.
Det här är den typen av arbetsflöde du sätter upp en gång och sedan förlitar dig på varje vecka när nästa audit (eller kundförfrågan) trillar in. Det repetitiva arbetet försvinner och sheetet blir något du faktiskt kan fatta beslut utifrån.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.