Din SEO-rapportering är förmodligen inte svår. Den är bara obeveklig. Dra ut några exporter, fixa decimaler, kontrollera länkar, klistra in i ett ”master”-ark och förklara sedan förändringar du inte hann utreda.
SEO-ansvariga känner av det först. Sedan marknadschefer som jagar månatliga KPI:er. Och ärligt talat: byråteam som kör Search Console-rapportering för 10+ kunder hamnar till slut med att leva i kalkylark. Den här automatiseringen för Search Console-rapportering gör hela rutinen till ett repeterbart system som håller sig konsekvent.
Du sätter upp ett n8n-flöde som hämtar Google Search Console- och GA4-mätvärden, kör länkkontroller, spårar vinnare/förlorare och skriver allt till Google Sheets. Felfria indata. Felfria utdata. Mindre ”kalkylarksarkeologi”.
Så fungerar automatiseringen
Här är hela workflowet du kommer att sätta upp:
n8n Workflow Template: Search Console + Google Sheets, klara SEO-rapporter
flowchart LR
subgraph sg0["When clicking 'Test workflow' Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking 'Test workflow'", pos: "b", h: 48 }
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/>Format Data 12"]
n25["<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/>Format Data 13"]
n26@{ icon: "mdi:database", form: "rounded", label: "Export Data from Document 1", pos: "b", h: 48 }
n27@{ icon: "mdi:database", form: "rounded", label: "Export Data from Document 2", pos: "b", h: 48 }
n28@{ icon: "mdi:database", form: "rounded", label: "Import Data to Sheet 10", pos: "b", h: 48 }
n29@{ icon: "mdi:database", form: "rounded", label: "Import Data to Sheet 11", pos: "b", h: 48 }
n24 --> n28
n25 --> n29
n26 --> n24
n27 --> n25
n0 --> n26
n0 --> n27
end
subgraph sg1["Proper Data Formatti Flow"]
direction LR
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Analyze External Links 1"]
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/code.svg' width='40' height='40' /></div><br/>Format Data for Table 1"]
n20@{ icon: "mdi:robot", form: "rounded", label: "Proper Data Formatting", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Format Data Under Table 1"]
n22@{ icon: "mdi:database", form: "rounded", label: "Import Data to Report 3", pos: "b", h: 48 }
n30@{ icon: "mdi:database", form: "rounded", label: "Export Links from Google Doc..", pos: "b", h: 48 }
n20 --> n21
n19 --> n20
n18 --> n19
n21 --> n22
n30 --> n18
end
subgraph sg2["Flow 3"]
direction LR
n13@{ icon: "mdi:database", form: "rounded", label: "Export Links from Document 1", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Import Data to Report 2", 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/httprequest.dark.svg' width='40' height='40' /></div><br/>Analyze Links 1"]
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/code.svg' width='40' height='40' /></div><br/>Format Data to Table 1"]
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/code.svg' width='40' height='40' /></div><br/>Format Data for Table Paste 1"]
n15 --> n16
n16 --> n17
n13 --> n15
n17 --> n14
end
subgraph sg3["Flow 4"]
direction LR
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/>Convert Dots to Commas 2"]
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/>Export Keywords from GSC 2"]
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/>Create Table 2"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Organize Table 2", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Import to Report 2", pos: "b", h: 48 }
n3 --> n1
n4 --> n5
n1 --> n4
n2 --> n3
end
subgraph sg4["Flow 5"]
direction LR
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/code.svg' width='40' height='40' /></div><br/>Convert Dots to Commas 3"]
n7["<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/>Export Keywords from GSC 3"]
n8["<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/>Create Table 3"]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Organize Table 3", pos: "b", h: 48 }
n23@{ icon: "mdi:database", form: "rounded", label: "Import to Report 3", pos: "b", h: 48 }
n8 --> n6
n9 --> n23
n6 --> n9
n7 --> n8
end
subgraph sg5["Flow 6"]
direction LR
n10@{ icon: "mdi:cog", form: "rounded", label: "Import from Google Analytics 1", pos: "b", h: 48 }
n11["<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/>Format Data 7"]
n12@{ icon: "mdi:database", form: "rounded", label: "Import to Report 1", pos: "b", h: 48 }
n11 --> n12
n10 --> n11
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 n0 trigger
class n20 ai
class n26,n27,n28,n29,n22,n30,n13,n14,n5,n23,n12 database
class n18,n15,n2,n7 api
class n24,n25,n19,n21,n16,n17,n1,n3,n6,n8,n11 code
classDef customIcon fill:none,stroke:none
class n24,n25,n18,n19,n21,n15,n16,n17,n1,n2,n3,n6,n7,n8,n11 customIcon
Varför det här spelar roll: SEO-rapporter går sönder på dussintals små sätt
Manuell SEO-rapportering har en särskild sorts kaos. En export har ett annat datumintervall. En annan använder ett annat decimalformat, så din ”genomsnittliga position” blir text. Din länkarapport är ”på väg” eftersom det är ett slit att kontrollera 200 URL:er för hand. Sedan frågar kunder varför klicken gick ner, och du stirrar på tre flikar och försöker bevisa att det är säsong och inte ett spårningsproblem. Det handlar inte bara om tid. Det är den mentala belastningen av att veta att minsta miss kan få hela rapporten att kännas opålitlig.
Inget av det här är problemet i sig. Tillsammans är de det.
- Du kör om samma exporter från Search Console och GA4 varje vecka, och formateringsjobbet upprepas varje gång.
- Länkkontroll hoppas över, vilket gör att trasiga interna länkar och döda externa referenser ligger kvar i månader.
- ”Toppnyckelord” och ”topsidor” ändras beroende på vem som byggde arket senast, så rapporter driver mellan kunder.
- Vinster och förluster spåras inte strukturerat, så du slutar med att förklara resultat utan en tydlig berättelse om upp-/nedgång.
Det du bygger: en kundredo pipeline för SEO-rapportering i Sheets
Det här flödet gör SEO-rapportering till en knapptrycksprocess du kan lita på. Du triggar det (manuellt, eller så kan du schemalägga det senare), och n8n hämtar dina senaste Search Console-data för sökfrågor och sidprestanda. Samtidigt samlar det in GA4-mätvärden för organisk räckvidd och formaterar sammanfattningen så att den läser som en rapport i stället för rå telemetri. Därefter hämtar det en lista med artikel-URL:er från ett källark i Google Sheets och kontrollerar både interna och externa länkar via HTTP-förfrågningar, så att du kan fånga trasiga länkar utan att manuellt crawla allt. Till sist skriver det varje rapportdel till rätt flikar i Google Sheets: nyckelord, sidor, organisk sammanfattning, interna länkar, externa länkar samt positionsförändringar för upp- och nedgångar.
Workflowet börjar med att samla in GSC- och GA4-mätvärden för ditt valda datumintervall. Sedan granskar det dina URL-listor för att bygga tabeller för länkaudit, med en AI-formaterare som kan städa upp röriga rader för externa länkar vid behov. Allt landar i Google Sheets, redan strukturerat för rapportering och enkelt att filtrera.
Det du bygger
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att du bygger veckorapporter för 6 kunder. Manuellt kanske du lägger cirka 20 minuter på att exportera och städa Search Console-sökfrågor, ytterligare 20 minuter på sidor, 15 minuter på GA4-mätvärden och minst 20 minuter på att kontrollera länkar och uppdatera tabeller. Det är ungefär 1 timme per kund, eller cirka 6 timmar i veckan. Med det här flödet tar triggen en minut eller två, sedan väntar du på bearbetningen och att Sheets uppdateras. De flesta team får tillbaka de 6 timmarna och lägger dem på analys i stället för ihopplock.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger funkar bra)
- Google Search Console för data om sökfrågor och sidprestanda
- Google Analytics 4 för att hämta mätvärden för organisk räckvidd
- Google Sheets som rapportdestination och URL-källa
- OpenAI API-nyckel (hämta den i OpenAI API-dashboarden)
Svårighetsnivå: Medel. Du kopplar Google-credentials och justerar några arknamn, intervall och datumparametrar.
Vill du att någon bygger det åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
En manuell trigger drar igång allt. I grundflödet klickar du på ”execute” i n8n när du vill uppdatera rapporter. Många team byter senare till schemaläggning, men att hålla det manuellt i början gör testningen säkrare.
Search Console-data hämtas och struktureras. n8n hämtar rankningar för sökfrågor och sidprestanda via HTTP-förfrågningar och formar sedan om dem till prydliga tabeller. Det finns också ett litet städsteg som normaliserar talformat (praktiskt om du har varit med om att kommatecken kontra punkt förstört ett ark).
GA4:s organiska mätvärden sammanfattas. Workflowet hämtar GA4-mätvärden med Google Analytics-noden och formaterar sedan utdata till en kort, rapportvänlig sammanfattning som läggs till i din ”Organic”-sektion i Google Sheets.
Kontroller av interna och externa länkar körs från dina URL-listor. Det hämtar artikel-URL:er från ett källark i Google Sheets, anropar varje sida, extraherar länkinformation och gör om den till rader du kan filtrera. För externa länkar hjälper ett OpenAI-steg till att formatera rörig länkdatastruktur till en konsekvent tabell, så att rapporten inte ser ihopskavd ut.
Allt hamnar i rätt flikar. Nyckelord, sidor, organisk sammanfattning, interna länkar, externa länkar och spårning av upp-/nedgång läggs till i Google Sheets så att rapporten är redo att granskas, inte byggas om.
Du kan enkelt ändra rapportperiod och filter så att de matchar kundernas cadence. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera den manuella triggern
Börja med att sätta upp den manuella triggern som startar rapporteringsarbetsflödet och delar upp det i parallella grenar för tillväxt och nedgång.
- Lägg till noden Manual Launch Trigger som din startpunkt.
- Koppla Manual Launch Trigger så att den skickar utdata parallellt till både Fetch Growth Sheet och Fetch Decline Sheet.
- Bekräfta att andra grenar startar oberoende (t.ex. Retrieve GA4 Metrics, Pull Internal URLs Sheet och Pull External URLs Sheet).
Steg 2: anslut Google Sheets
Det här arbetsflödet läser från och skriver till flera Google Sheets för URL:er, tillväxt-/nedgångsdata och rapportutdata.
- Öppna varje Google Sheets-nod och ange rätt Document ID och Sheet Name, till exempel Pull External URLs Sheet (
YOUR_DATA_SHEET_ID) och rapportnoder som Append Organic Report (YOUR_GOOGLE_SHEET_ID). - Uppdatera noderna för rapportdestination: Append Keyword Report A, Append Page Report, Append Internal Links Report, Append External Links Report, Append Growth Sheet och Append Decline Sheet med era mål-ark-ID:n och arknamn.
- Säkerställ att indata-arknoderna (Pull Internal URLs Sheet, Pull External URLs Sheet, Fetch Growth Sheet, Fetch Decline Sheet) pekar på ark som innehåller en URL-kolumn där det krävs.
Steg 3: sätt upp pipelines för Search Console-nyckelord och sidor
Konfigurera Google Search Console-förfrågningar och tabellformatering för nyckelord och sidor.
- I Fetch GSC Queries A ställer ni in URL till
https://www.googleapis.com/webmasters/v3/sites/https%3A%2F%2Fexample.com/searchAnalytics/query, Method tillPOSToch behåller datumintervallet i JSON-body, till exempel"startDate": "2025-11-01"och"endDate": "2025-11-25". - I Fetch GSC Pages B använder ni samma API-endpoint men säkerställ att JSON-body innehåller
"dimensions": ["page"]samt datumintervallet"startDate": "2025-09-01"till"endDate": "2025-09-30". - Låt bearbetningsflödet vara intakt: Fetch GSC Queries A → Build Keyword Table A → Swap Dots for Commas A → Arrange Keyword Fields A → Append Keyword Report A.
- För sidor, behåll flödet: Fetch GSC Pages B → Build Page Table B → Swap Dots for Commas B → Arrange Page Fields B → Append Page Report.
- I Arrange Keyword Fields A mappar ni fält med uttryck som
{{$json["Keyword"]}},{{$json["Clicks"]}}och{{$json["Average Position"]}}. - I Arrange Page Fields B behåller ni fältmappningarna och noterar att Keyword fylls från
{{$json["Page"]}}.
Steg 4: konfigurera GA4-analysöversikt
Den här vägen hämtar GA4-mått och formaterar en sammanfattningstabell innan den läggs till i Google Sheets.
- I Retrieve GA4 Metrics ställer ni in Property ID till
YOUR_GA4_PROPERTY_IDoch behåller det anpassade datumintervallet från2025-11-01T00:00:00till2025-11-25T00:00:00. - Säkerställ att mätvärdena inkluderar
organicGoogleSearchClicks,organicGoogleSearchImpressions,organicGoogleSearchClickThroughRateochorganicGoogleSearchAveragePosition. - Bekräfta att körvägen Retrieve GA4 Metrics → Format Analytics Summary → Append Organic Report är intakt.
Steg 5: sätt upp analys av interna och externa länkar (med AI)
Det här avsnittet inspekterar sidor efter interna länkar och använder AI för att formatera extern länkdata för rapportering.
- För interna länkar, behåll flödet: Pull Internal URLs Sheet → Inspect Internal Links (ställ in URL till
{{$json["URL"]}}) → Shape Link Data Table → Prepare Link Rows → Append Internal Links Report. - För externa länkar, behåll flödet: Pull External URLs Sheet → Inspect External Links (ställ in URL till
{{$json["URL"]}}) → Normalize External Link Data → AI Tabular Formatter → Parse AI Link Rows → Append External Links Report. - I AI Tabular Formatter verifierar ni att meddelandeinnehållet använder de inbäddade uttrycken för titel, kanonisk länk och publiceringsdatum.
- I Append External Links Report behåller ni kolumnmappningar som
{{$json["Article Title"]}}och{{$json["Publication Date"]}}.
Steg 6: normalisera tillväxt- och nedgångsdata
Grenarna för tillväxt och nedgång läser från källark, normaliserar talformat och lägger till rensad data.
- Säkerställ att tillväxtvägen är kopplad: Fetch Growth Sheet → Normalize Growth Metrics → Append Growth Sheet.
- Säkerställ att nedgångsvägen är kopplad: Fetch Decline Sheet → Normalize Decline Metrics → Append Decline Sheet.
- Granska formateringslogiken i Normalize Growth Metrics och Normalize Decline Metrics för att bekräfta konvertering från punkt till komma för numeriska fält som Estimated Traffic.
Steg 7: testa och aktivera ert arbetsflöde
Kör ett fullständigt test för att bekräfta att varje rapport läggs till korrekt och att alla grenar körs som förväntat.
- Klicka på Execute Workflow för att köra Manual Launch Trigger och verifiera att Fetch Growth Sheet och Fetch Decline Sheet körs parallellt.
- Bekräfta att nya rader läggs till i era målark för rapporterna: organic, keyword, page, internal links, external links, growth och decline.
- Kontrollera Append Organic Report, Append Keyword Report A, Append Page Report, Append Internal Links Report, Append External Links Report, Append Growth Sheet och Append Decline Sheet för korrekt dataformatering (kommatecken, datum och totaler).
- När allt ser korrekt ut, växla arbetsflödet till Active för produktionsbruk.
Felsökningstips
- Credentials för Google Search Console och Google Sheets kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera avsnittet Credentials i n8n och bekräfta att det anslutna Google-kontot fortfarande har åtkomst till rätt egendomar och kalkylark.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera utdata i all evighet.
Snabba svar
Cirka 30 minuter om dina Google-konton redan är anslutna.
Nej. Du kopplar främst credentials, väljer dina Sheets och justerar datumintervall och filter.
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 för steget som formaterar externa länkar (ofta några dollar i månaden vid normal rapportvolym).
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och klarar n8n bra. Self-hosting ger dig obegränsat antal körningar men kräver grundläggande serveradministration.
Ja, och det bör du. De flesta team anpassar Google Sheets-fliken ”source URLs” (stegen Pull Internal URLs Sheet och Pull External URLs Sheet) och justerar sedan Search Console-gränser för antal rader och nyckelordsfilter så att rapporten matchar kundens mål. Du kan också byta ut OpenAI-formateringssteget mot en striktare regelbaserad formaterare om du vill ha helt deterministisk utdata, men AI Tabular Formatter är användbar när rader för externa länkar är inkonsekventa. Datumintervall är den vanligaste ändringen, och de ligger i dina Search Console- och GA4-noder.
Oftast är det ett OAuth-behörighetsproblem eller att arket flyttades/bytte namn. Anslut om din Google Sheets-credential i n8n och bekräfta sedan att målfilens kalkylarks-ID och fliknamn fortfarande matchar det workflowet förväntar sig. Om du kör det här i en byråsetup, dubbelkolla också att du är autentiserad som kontot som faktiskt äger (eller har redigeringsåtkomst till) kundens rapportfil.
Gott om för normal rapportering. Search Console hämtar de 1000 främsta sökfrågorna i det här workflowet, och länkkontrollerna beror på hur många URL:er du listar i ditt källark. På n8n Cloud beror dina månatliga körningar på plan; vid self-hosting finns ingen körningsbegränsning, så kapaciteten handlar mest om serverresurser och hur aggressivt du kör HTTP-länkkontroller. Om du försöker bearbeta tusentals URL:er på en gång, räkna med långsammare körningar och överväg batchning.
Ofta, ja. Det här workflowet är inte bara ”flytta data från A till B”; det formar om tabeller, slår ihop sektioner och kör länkinspektioner, och det är där enklare verktyg börjar kännas trånga. n8n ger dig också ett self-hosted-alternativ, vilket kan spela roll när du hanterar många kunder och inte vill att körningsgränser ska styra din process. Zapier eller Make kan fortfarande vara bra för en enkel Search Console → Sheets-synk, särskilt om du vill ha enklaste möjliga UI och inte gör länkanalys. Om du är osäker, prata med en automationsexpert så pekar vi dig mot bästa valet.
När det här väl rullar blir rapportering en granskningsuppgift i stället för ett ombyggnadsjobb. Workflowet tar hand om de repetitiva delarna, så att du kan lägga tiden på att hitta insikter som kunder faktiskt bryr sig om.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.