SEO-audits börjar med goda intentioner och slutar i en flikexplosion. Du crawlar en sajt, kopierar problem till ett dokument, skriver om allt så att det låter mänskligt och oroar dig ändå för att du missade halva URL-listan.
Marknadschefer känner igen det när ledningen vill ha ”en snabb audit” till fredag. Byråägare märker det när en kund vill ha uppdateringar varje vecka. Och om du frilansar kan ChatGPT SEO audits vara skillnaden mellan en lönsam retainer och ett aldrig slutande kalkylark.
Det här n8n-flödet kartlägger en sajts interna URL:er, kör AI-analys sida för sida och levererar sedan en kundredo HTML-rapport och en strukturerad Google Sheets-logg. Du får se vad som automatiseras, vilka resultat du kan förvänta dig och vad du behöver se upp med.
Så fungerar den här automatiseringen
Hela n8n-flödet, från trigger till slutlig output:
n8n Workflow Template: ChatGPT + Google Sheets: SEO-granskningar att skicka
flowchart LR
subgraph sg0["MANUAL Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Iterar Páginas", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out2", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields1", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "OpenAI1", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Code"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "LANGUAGE", pos: "b", h: 48 }
n6["<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/>Maping Sitemap"]
n7@{ icon: "mdi:cog", form: "rounded", label: "XML1", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out8", pos: "b", h: 48 }
n9["<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/>To html"]
n10["<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/>Html to JSON"]
n11@{ icon: "mdi:database", form: "rounded", label: "Google Sheets1", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out10", pos: "b", h: 48 }
n13["<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/>HTML format viewer"]
n14@{ icon: "mdi:cog", form: "rounded", label: "Eliminar Webs Duplicadas", pos: "b", h: 48 }
n15["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond to Webhook"]
n16["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
n17@{ icon: "mdi:play-circle", form: "rounded", label: "MANUAL", pos: "b", h: 48 }
n18["<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/>UA Rotativo1"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "URL WEB", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Method detect"]
n21@{ icon: "mdi:location-exit", form: "rounded", label: "Req Error", pos: "b", h: 48 }
n22@{ icon: "mdi:location-exit", form: "rounded", label: "Sitemap Error", pos: "b", h: 48 }
n23["<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/>Req robots"]
n24["<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/>extract sitemap url"]
n25@{ icon: "mdi:location-exit", form: "rounded", label: "Req Error1", pos: "b", h: 48 }
n26@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter URL", pos: "b", h: 48 }
n27@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Filter URL Intern", pos: "b", h: 48 }
n28@{ icon: "mdi:message-outline", form: "rounded", label: "Send Results", pos: "b", h: 48 }
n29["<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/>Obtener Contenido Web"]
n4 --> n0
n7 --> n1
n17 --> n19
n3 --> n4
n9 --> n28
n9 --> n10
n9 --> n13
n19 --> n5
n16 --> n5
n5 --> n18
n26 --> n27
n23 --> n24
n23 --> n21
n1 --> n26
n1 --> n25
n8 --> n9
n12 --> n11
n2 --> n29
n10 --> n12
n18 --> n20
n20 --> n23
n6 --> n7
n6 --> n22
n0 --> n8
n0 --> n2
n27 --> n14
n13 --> n15
n24 --> n6
n29 --> n3
n14 --> n0
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 n17 trigger
class n3 ai
class n26,n27 decision
class n11 database
class n6,n15,n16,n23,n29 api
class n4,n9,n10,n18,n20,n24 code
classDef customIcon fill:none,stroke:none
class n4,n6,n9,n10,n13,n15,n16,n18,n20,n23,n24,n29 customIcon
Problemet: SEO-audits för hela sajten tar för lång tid att leverera
En riktig audit är inte ”kolla startsidan och några nyckelsidor”. Det är varje indexerbar URL, plus de tråkiga detaljerna: titlar, metabeskrivningar, rubrikstruktur, canonicals, hreflang, Open Graph, interna länkar, dubbletter och tunna sidor som gömmer sig i hörnen. Att göra det manuellt innebär att crawla, exportera, filtrera och sedan förklara problemen på ett sätt som kunden kan agera på. När du väl har putsat rapporten har sajten redan ändrats, och du gör samma jobb igen nästa månad.
Friktionen byggs på. Här är var det brukar fallera.
- Du lägger cirka 2 timmar bara på att samla in URL:er, särskilt när sitemaps är röriga eller ofullständiga.
- Manuella kontroller missar sidor, vilket leder till ”Varför var inte den här med?”-diskussioner senare.
- Att göra rå crawl-data till en kundredo berättelse kan ta längre tid än själva crawlen.
- Varje audit hamnar i ett eget dokument, så det blir svårt att följa trender över månader.
Lösningen: AI-driven crawling + Sheets-loggning + HTML-rapport
Det här flödet kör en fullständig audit av interna URL:er från din egen n8n-instans och levererar resultatet i format som folk faktiskt använder. Det börjar med att automatiskt identifiera sajtens sitemap (via robots.txt) och tolkar sedan sitemapen för att extrahera URL:er. Därefter filtrerar det bort sådant som inte är sidor (tillgångar som bilder och script) och behåller bara interna URL:er som är värda att kontrollera. För varje sida hämtar det HTML-innehållet, skickar innehållet till en ChatGPT-modell (GPT-4o-mini i flödet) och får tillbaka strukturerad diagnostik och rekommendationer. Till sist sammanställer det allt till en professionell HTML-rapport som du kan dela, samtidigt som resultatet loggas i Google Sheets för samarbete och återkommande audits.
Flödet kan triggas manuellt eller via webhook så att andra system kan starta audits automatiskt. Det bearbetar sedan sidor i batcher, vilket gör att stora sajter inte timear ut. När det är klart får du en putsad HTML-output, valfri leverans via e-post och ett sökbart kalkylark med issues.
Det du får: automatisering vs. resultat
| Det här flödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du auditar en sajt med 200 URL:er. Manuellt, även en snabb genomgång på cirka 3 minuter per sida blir ungefär 10 timmar, och det är innan du skriver rapporten. Med det här flödet triggar du auditen (cirka 5 minuter), låter den crawla och analysera i batcher (ofta runt 30–60 minuter beroende på sajt och modellens hastighet), och skickar sedan HTML-rapporten och delar Google Sheet. Realistiskt sett är du tillbaka i att granska och prioritera i stället för att copy-pasta.
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 logga issues och samarbeta
- OpenAI (ChatGPT API) för att generera sid-diagnostik och rekommendationer
- OpenAI API-nyckel (hämta den i OpenAI-dashboarden)
Svårighetsgrad: Mellan. Du kopplar in credentials, sätter en mål-domän och förstår grundläggande koncept kring URL:er och sitemaps.
Vill du inte sätta upp det här själv? Prata med en automatiseringsexpert (gratis 15-minuters konsultation).
Så fungerar det
Du triggar en audit (manuellt eller via webhook). Du kan köra den inne i n8n för engångsaudits, eller anropa en webhook så att ett formulär, CRM eller ett internt verktyg kan starta audits automatiskt.
Flödet hittar sitemapen på samma sätt som en crawler gör. Det hämtar robots.txt, plockar ut sitemap-länken, hämtar sitemap-XML:en och tolkar den till en URL-lista. Om sitemapen är blockerad eller ovanlig stoppar flödet med ett tydligt felmeddelande i stället för att misslyckas i det tysta.
URL:er struktureras, filtreras och körs i batcher. Det tar bort dubbletter, filtrerar bort icke-interna URL:er och loopar sedan igenom sidor i kontrollerade batcher för att undvika timeouts. En roterande user agent ingår så att du inte ser ut som en enda bot som hamrar samma endpoint.
Varje sida hämtas, analyseras av ChatGPT och blir till leveranser. Flödet hämtar HTML-innehåll, skickar det till OpenAI Chat Model för SEO-diagnostik (metataggar, rubriker, hreflang, Open Graph, dubbletter, interna länkar med mera) och slår sedan ihop resultatet till en HTML-rapport och en strukturerad JSON som uppdaterar Google Sheets. Det kan även mejla slutrapporten via Gmail.
Du kan enkelt ändra analysspråk och var output ska hamna utifrån dina behov. Se hela implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementation
Steg 1: Konfigurera webhook-triggern
Det här arbetsflödet kan starta antingen via en manuell körning eller en inkommande webhook, där båda leder in i samma flöde för att upptäcka sitemaps.
- Lägg till och granska Incoming Webhook Trigger för att ta emot inkommande förfrågningar från ert externa system.
- Lägg till Manual Start Trigger för testning och manuella körningar under uppsättning.
- Koppla båda triggernoderna till Set Website URL (manuell) och Set Language (webhook) som visas i arbetsflödet.
Steg 2: Koppla webbplatsinmatningar och sitemap-upptäckt
Dessa noder bygger sökvägen för sitemap-förfrågan och routar URL:er för vidare bearbetning.
- Konfigurera Set Website URL för att lagra målsidans URL för bearbetning.
- Använd Set Language för att definiera språk- eller locale-värden som används av senare logik.
- Säkerställ att Rotate User Agent och Detect Method är kopplade för att styra request-headers och hämtningsstrategi.
- Konfigurera Request Robots för att hämta robots.txt-filen och skicka den vidare till Extract Sitemap Link.
- Sätt upp Sitemap Mapping för att begära sitemap-URL:en och mata in den i Parse XML, och därefter i Distribute Items A.
⚠️ Vanlig fallgrop: Om Request Robots eller Sitemap Mapping misslyckas, routar arbetsflödet till Request Error Stop eller Sitemap Failure Stop, så validera först er webbplats-URL och åtkomst till sitemap.
Steg 3: Filtrera och batcha URL:er för bearbetning
Sitemap-resultaten filtreras och avdupliceras innan de bearbetas i batchar.
- Granska Distribute Items A och säkerställ att den delar upp de parsade sitemap-objekten korrekt för filtrering.
- Konfigurera Filter URLs och Filter Internal URLs så att endast de sidor ni vill analysera inkluderas.
- Använd Remove Duplicate Sites för att undvika att bearbeta dubblett-URL:er.
- Bekräfta att Remove Duplicate Sites routar in i Process Page Batches för att styra genomströmningen.
Steg 4: Sätt upp innehållshämtning och AI-bearbetning
Den här delen hämtar webbsidor och skickar innehållet till AI-modellen för analys.
- Konfigurera Assign Fields A för att mappa URL-fält som används av Fetch Web Content.
- Sätt upp Fetch Web Content för att begära varje sid-URL och returnera HTML för bearbetning.
- Lägg in era inställningar för AI-modellen i OpenAI Processor för att analysera sidinnehåll.
- Säkerställ att OpenAI Processor matar in i Custom Script och därefter tillbaka till Process Page Batches för iterativ batchning.
Inloggningsuppgifter krävs: Anslut era OpenAI-inloggningsuppgifter i OpenAI Processor.
Steg 5: Konfigurera utdataformatering och parallell leverans
Utdata sammanställs till HTML och levereras sedan via flera parallella grenar.
- Verifiera att Distribute Items B matar in i Build HTML för att sammanställa resultat.
- Notera den parallella exekveringen: Build HTML skickar utdata parallellt till Dispatch Results Email, Convert HTML to JSON och Preview HTML.
- Använd Preview HTML för rendering i arbetsflödet innan svaret returneras via Return Webhook Response.
- Säkerställ att Convert HTML to JSON routar till Distribute Items C och därefter till Update Google Sheet för lagring.
- Konfigurera Dispatch Results Email för att skicka HTML-rapporten till mottagare.
Inloggningsuppgifter krävs: Anslut era Gmail-inloggningsuppgifter i Dispatch Results Email.
Inloggningsuppgifter krävs: Anslut era Google Sheets-inloggningsuppgifter i Update Google Sheet.
Steg 6: Lägg till felhantering
Det här arbetsflödet innehåller explicita stopnoder för att förhindra tysta fel vid hantering av sitemaps och requests.
- Bekräfta att Request Error Stop är kopplad till felutgången från Request Robots.
- Bekräfta att Sitemap Failure Stop är kopplad till felutgången från Sitemap Mapping.
- Verifiera att Request Error Halt är kopplad till felutgången från Distribute Items A för att stoppa bearbetning av felaktiga sitemap-objekt.
⚠️ Vanlig fallgrop: Om felutgångar inte är kopplade kan fel framstå som tom data längre ned i flödet. Testa alltid era felrutter.
Steg 7: Testa och aktivera ert arbetsflöde
Validera båda trigger-vägarna och bekräfta utdata i e-post, Google Sheets och webhook-svar.
- Använd Manual Start Trigger för att köra ett test med en känd webbplats-URL och bekräfta sitemap-upptäckt.
- Kontrollera att Preview HTML genererar utdata och att Return Webhook Response returnerar det förhandsvisade innehållet.
- Verifiera att Dispatch Results Email skickar ett e-postmeddelande och att Update Google Sheet tar emot nya rader.
- Växla arbetsflödet till aktivt och testa URL:en för Incoming Webhook Trigger från ert externa system.
Vanliga fallgropar
- Credentials för Google Sheets kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera Google-kopplingen i n8n och bekräfta att målarket är delat med det anslutna Google-kontot.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om noder längre fram fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din tonalitet tidigt, annars kommer du att redigera output för alltid.
Vanliga frågor
Cirka 30 minuter när dina credentials är klara.
Nej. Du lägger främst in credentials och anger mål-domänen. Du kan låta kodnoderna vara som de är om du inte vill ha egen formatering.
Ja. n8n har ett gratis alternativ 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 med OpenAI API-kostnader (ungefär 0,01 € per 20 analyserade URL:er).
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 dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en av de bästa anledningarna att använda det här flödet. Du kan ändra analysspråk i steget ”Set Language”, och du kan byta var resultatet hamnar genom att justera stegen för uppdatering av Google Sheets och Gmail-utskick. Vanliga anpassningar är att generera en kortare ”sammanfattning för beslutsfattare” för kunder, skicka resultat till Notion eller Slack och ändra filtren så att du bara auditar vissa mappar som /blog/ eller /products/.
Oftast beror det på utgångna Google-credentials eller att arket inte är delat med det anslutna kontot. Koppla om Google Sheets i n8n och dubbelkolla sedan kalkylarkets ID och vald flik (worksheet). Om det fortfarande misslyckas, leta efter behörighetsfel i nodens output och bekräfta att du inte skriver till ett skyddat intervall.
Hundratals är normalt.
Ofta, ja, om du bryr dig om full täckning av sajten och anpassad logik. Det här flödet kräver batching, felhantering, hämtning av HTML och en strukturerad loop för ”analysera varje sida”, vilket är exakt där n8n brukar kännas mer flexibelt. Zapier och Make kan fungera, men blir ofta dyra eller klumpiga när du itererar över många URL:er. Dessutom kan egen hosting av n8n ta bort körningsbegränsningar helt om du gör många audits. Är du osäker, prata med en automatiseringsexpert och beskriv din audit-volym.
Du sätter upp det här en gång, och sedan blir audits ett knapptryck i stället för ett miniprojekt. Det är ärligt talat poängen: snabbare leverans, mer strukturerad rapportering och mer tid att agera på det som auditen hittar.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.