Du hämtar en sitemap, klistrar in några URL:er i ett ark och tycker att det är klart. Sedan inser du att sajten har fem sitemap-filer, två av dem är gzippade, och robots.txt pekar på ett annat index än sitemap.xml.
Det är den här typen av röra som sänker SEO-leads, bromsar marketing ops och, ärligt talat, irriterar byråteam som försöker köra revisioner i skala. Med den här ScrapingBee Sheets-automationen skickar du en domän och får ett växande ”alla URL:er”-ark som du faktiskt kan lita på.
Nedan får du exakt workflow, vad det löser och vad du behöver för att få in varje sitemap-URL i Google Sheets utan att behöva vaka över processen.
Så fungerar den här automatiseringen
Hela n8n-workflowet, från trigger till slutresultat:
n8n Workflow Template: ScrapingBee till Google Sheets: alla sitemap-URL:er
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Parse XML as JSON", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Binary Payload", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Inbound Domain Hook"]
n3@{ icon: "mdi:web", form: "rounded", label: "Fetch robots.txt", pos: "b", h: 48 }
n4@{ icon: "mdi:web", form: "rounded", label: "Retrieve sitemap.xml", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Detect sitemap refs", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check for GZ archive", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Unzip GZ content", pos: "b", h: 48 }
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/>Map Binary Data Key"]
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/>Collect Non-XML URLs"]
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/>Gather XML URLs"]
n11@{ icon: "mdi:web", form: "rounded", label: "Fetch XML Resource", pos: "b", h: 48 }
n12@{ icon: "mdi:database", form: "rounded", label: "Append URLs to Sheet", pos: "b", h: 48 }
n11 --> n1
n2 --> n3
n10 --> n11
n6 --> n7
n6 --> n0
n7 --> n8
n9 --> n12
n1 --> n6
n1 --> n9
n1 --> n10
n3 --> n5
n3 --> n4
n4 --> n1
n0 --> n9
n0 --> n10
n5 --> n10
n5 --> n4
n8 --> 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 n1,n5,n6 decision
class n12 database
class n2,n3,n4,n11 api
class n8,n9,n10 code
classDef customIcon fill:none,stroke:none
class n2,n8,n9,n10 customIcon
Problemet: sitemaps är aldrig ”bara en fil”
Att plocka ut sitemap-URL:er låter enkelt tills du gör det på riktiga webbplatser. Du laddar ner sitemap.xml, men det är egentligen ett sitemap-index som länkar till tio andra XML:er, och några av dem länkar vidare. Sedan har du robots.txt, som kan lista en annan sitemap än den du gissade på. Lägg till gzippade sitemaps (sitemap.xml.gz) och du har ett upplägg som skapar fel så fort du försöker göra det manuellt. Du tappar en eftermiddag, missar ändå sidor och känner dig inte tillräckligt trygg för att basera en revision på listan du samlade in.
Det går snabbt att det skenar. Här är var det brukar fallera.
- Du slutar med att kopiera in ofullständiga URL-listor i Google Sheets och inser sedan att du missat hela grenar av sitemaps.
- Komprimerade sitemap-filer kräver extra steg, och det är lätt att hoppa över dem när du jobbar snabbt.
- Sajter som blockerar enkla förfrågningar gör ”snabba script” opålitliga, vilket innebär att du kör om jobbet och ändå tvivlar på resultatet.
- När sitemaps uppdateras blir ditt kalkylark snabbt inaktuellt om ingen upprepar hela processen igen.
Lösningen: skicka en domän, få varje URL i ett ark
Det här n8n-workflowet startar med ett enkelt webhook-anrop som innehåller domänen (som domain=www.example.com). Därefter använder det ScrapingBee för att hämta robots.txt, kontrollerar efter sitemap-referenser och faller tillbaka till sitemap.xml när robots.txt inte hjälper. Varje XML-resurs som upptäcks hämtas och inspekteras, inklusive knepiga fall som binära payloads och gzippade arkiv. Workflowet extraherar två saker: de ”riktiga” webbplats-URL:er du vill revidera, och eventuella extra XML-sitemaplänkar som ska följas härnäst. De XML-länkarna matas tillbaka in i samma hämta-och-parsa-loop tills det inte finns fler sitemap-filer att jaga, och varje upptäckt sid-URL appendas till ett Google-ark.
Workflowet startar när du skickar en GET-förfrågan till webhooken med en domän. ScrapingBee hämtar robots.txt och sitemap.xml, och därefter samlar workflowet rekursivt in sitemap-länkar och sidlänkar (inklusive .gz-sitemaps). Till sist appendas alla icke-XML-URL:er till en enda kolumn, links, i Google Sheets så att du kan filtrera, avduplicera och revidera.
Det du får: automatisering vs. resultat
| Vad det här workflowet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du reviderar en medelstor e-handelssajt med 12 sitemap-filer, och att varje fil tar cirka 10 minuter att ladda ner, öppna, extrahera och klistra in i ett ark. Det är ungefär 2 timmar, och det är innan du upptäcker att tre av dem är .gz-arkiv. Med det här workflowet skickar du en webhook-förfrågan (en minut), låter n8n och ScrapingBee bearbeta och köra rekursivt i kanske 20 minuter, och ditt Google-ark fylls på under tiden. Du granskar fortfarande listan, men du gör inte grovjobbet.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för egen drift om du föredrar det (Hostinger fungerar bra)
- ScrapingBee för att hämta robots.txt och sitemaps på ett tillförlitligt sätt.
- Google Sheets för att lagra den slutliga URL-listan.
- ScrapingBee API-nyckel (hämta den i din ScrapingBee-dashboard).
Kunskapsnivå: Medel. Du klistrar in inloggningsuppgifter, skapar en kolumn i arket som heter links, och testar ett webhook-anrop.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En webhook startar körningen. Du anropar workflowets URL med en enda query-parameter (domain=…). Det är allt. Inga CSV-uppladdningar, inga manuella inmatningar utöver domänen.
Sitemaps upptäcks på det sätt som sökmotorer förväntar sig. Workflowet hämtar robots.txt via ScrapingBee, kontrollerar efter sitemap-referenser och hämtar sedan sitemap.xml vid behov. Det spelar roll eftersom många sajter inte lägger sin ”riktiga” sitemap där du skulle anta.
Varje XML-resurs inspekteras och tolkas. Workflowet kontrollerar om svaret är text eller binärt, upptäcker .gz-arkiv, packar upp när det krävs och tolkar XML till strukturerad data så att URL:er kan extraheras konsekvent.
URL:er delas upp i två flöden. Vanliga sid-URL:er appendas direkt till Google Sheets, medan nyfunna XML-sitemaplänkar matas tillbaka in i workflowet för att hämtas härnäst. Loopen fortsätter tills det inte finns några XML-länkar kvar att hämta.
Du kan enkelt ändra destinationen från Google Sheets till Excel 365 eller en databas beroende på dina behov. Se den fullständiga implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera webhook-triggern
Sätt upp den inkommande webhooken som tar emot en domän och startar sitemap-upptäckt.
- Lägg till noden Inbound Domain Hook som trigger.
- Ställ in Path till
1da30868-fbca-4e8e-8580-485afb3fd956. - Planera att anropa webhooken med en query-parameter som heter domain (t.ex.
?domain=example.com).
⚠️ Vanlig fallgrop: Arbetsflödet förväntar sig $('Inbound Domain Hook').item.json.query.domain. Om ni skickar domänen i body i stället för i query blir URL:erna i Fetch robots.txt och Retrieve sitemap.xml tomma.
Steg 2: anslut ScrapingBee och konfigurera sitemap-upptäckt
Hämta robots.txt och sitemap.xml via ScrapingBee för att hitta sitemap-referenser.
- I Fetch robots.txt ställer ni in URL till
=https://{{ $('Inbound Domain Hook').item.json.query.domain }}/robots.txt. - Inloggning krävs: Anslut era ScrapingBeeApi-uppgifter i Fetch robots.txt.
- I Retrieve sitemap.xml ställer ni in URL till
=https://{{ $('Inbound Domain Hook').item.json.query.domain }}/sitemap.xml. - Inloggning krävs: Anslut era ScrapingBeeApi-uppgifter i Retrieve sitemap.xml och Fetch XML Resource (används för sitemap-URL:er som upptäcks senare).
- Lämna Detect sitemap refs som den är; den kontrollerar
={{ $json.data }}efter strängenSitemap:för att hitta sitemap-referenser.
/robots.txt och /sitemap.xml utan att ni behöver ändra några nodinställningar.Steg 3: konfigurera binär hantering och XML-tolkning
Hantera binära sitemap-svar, inklusive gzip-arkiv, innan ni tolkar XML.
- I Check Binary Payload behåller ni villkoret
={{ $binary }}is not empty för att styra binär bearbetning. - I Check for GZ archive behåller ni Left Value som
={{ $binary.data.fileExtension }}och Right Value somgz. - Använd Unzip GZ content för att packa upp gzip-sitemaps innan tolkning.
- I Map Binary Data Key behåller ni JavaScript-koden som mappar om
file_0tilldataså att Parse XML as JSON kan läsa den. - I Parse XML as JSON ställer ni in Operation till
xmloch Binary Property Name till=data.
⚠️ Vanlig fallgrop: Om Map Binary Data Key tas bort hittar Parse XML as JSON inte data och tolkningen misslyckas för gzip-komprimerade sitemaps.
Steg 4: konfigurera URL-extrahering och parallell förgrening
Dela upp tolkad XML i icke-XML-URL:er för output och XML-URL:er för rekursiv hämtning.
- Behåll koden i Collect Non-XML URLs för att skapa items med
{ "link": "..." }samtidigt som ni exkluderar.xml,.xml.gz,www.sitemaps.orgochwww.w3.org. - Behåll koden i Gather XML URLs för att skapa items med
{ "xml": "..." }för crawlning av nästlade sitemaps. - Parse XML as JSON skickar output parallellt till både Collect Non-XML URLs och Gather XML URLs.
- Bekräfta att Gather XML URLs är kopplad till Fetch XML Resource för att hämta nästlad sitemap-XML via
={{ $json.xml }}.
Steg 5: konfigurera output till Google Sheets
Lägg till upptäckta icke-XML-URL:er i ett kalkylark för lagring och analys.
- Lägg till Append URLs to Sheet efter Collect Non-XML URLs.
- Inloggning krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Append URLs to Sheet.
- Ställ in Operation till
appendoch aktivera Use Append. - Ställ in Document till
[YOUR_ID]och Sheet tillSheet1(gid=0). - I Columns mappar ni links till
={{ $json.link }}.
Steg 6: testa och aktivera ert arbetsflöde
Validera körningen med en exempeldomän och aktivera sedan arbetsflödet för produktion.
- Klicka på Execute Workflow och trigga Inbound Domain Hook med en test-URL som
?domain=example.com. - Verifiera att Fetch robots.txt och Retrieve sitemap.xml returnerar innehåll och att Check Binary Payload routar korrekt.
- Bekräfta att Append URLs to Sheet lägger till rader med URL-värden i kolumnen links.
- När allt fungerar, växla arbetsflödet till Active för att använda webhooken live.
Vanliga fallgropar
- ScrapingBee-inloggningsuppgifter kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först status för API-nyckeln och gränserna i din plan i ScrapingBee-dashboarden.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om noder längre ned i flödet misslyckas på grund av tomma svar.
- Append till Google Sheets kan tyst gå snett om arket saknar en links-kolumn eller om Google-kontot tappar åtkomst. Kontrollera anslutningen i Google Sheets-noden och ID:t för målarket.
Vanliga frågor
Cirka 30 minuter om din ScrapingBee-nyckel och ditt Google-ark är redo.
Nej. Du kopplar mestadels konton och klistrar in webhook-URL:en för testning.
Ja. n8n har ett gratis alternativ för egen drift och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna in ScrapingBee API-kostnader baserat på din användning.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller egen drift på en VPS. För egen drift är Hostinger VPS prisvärt och hanterar n8n bra. Egen drift ger dig obegränsade körningar men kräver grundläggande serveradministration.
Ja, men du byter destinationsnod. Ersätt Google Sheets-steget ”Append URLs to Sheet” med Microsoft Excel 365 (eller en databas) och behåll resten av logiken för sitemap-upptäckt oförändrad. Vanliga anpassningar är att skriva till flera flikar, avduplicera innan insert och lagra extra kolumner som käll-sitemapfilen.
Oftast är det en ogiltig eller utgången API-nyckel, så generera om den i ScrapingBee och uppdatera inloggningsuppgiften i n8n. Det kan också vara en begränsning i din plan om sajten har många XML-filer, eller en blockerad förfrågan som kräver att ScrapingBees premium/stealth proxy-alternativ aktiveras i noderna ”Fetch robots.txt”, ”Retrieve sitemap.xml” eller ”Fetch XML Resource”. Om felen bara händer på .gz-filer, kontrollera grenen för gzip-detektering och uppackning, eftersom en binär payload kan tolkas fel om content-type är ovanlig.
Det beror mer på minne och API-gränser än på ett hårt tak för URL:er. På n8n Cloud Starter begränsas du av månatliga körningar, vilket funkar för periodiska revisioner men inte är optimalt för kontinuerlig crawling. Om du kör i egen drift finns ingen körningsgräns, och kapaciteten avgörs mest av serverns RAM och hur tunga sitemapsen är. För väldigt stora sitemap-index, kör under lågtrafik och överväg att skriva inkrementella resultat (vilket det här workflowet redan gör genom att appenda allt eftersom det hittar URL:er).
För rekursiv sitemap-skrapning, ja, i de flesta fall. Zapier och Make är bra för linjära ”A till B”-flöden, men de blir klumpiga när du behöver loopar, grenlogik för gz-filer och ”fortsätt tills det inte finns fler XML-länkar”. n8n hanterar den strukturen snyggt, och du kan köra i egen drift för hög volym utan att betala per litet steg. Om ditt användningsfall bara är ”hämta en sitemap och skriv den till ett ark” kan Zapier vara enklare. Prata med en automationsexpert om du vill ha en snabb rekommendation baserat på din volym.
När det här väl rullar slutar ”ge mig hela listan med sitemap-URL:er” att vara en halvdagsuppgift. Workflowet sköter jakten och tolkningen så att du kan gå tillbaka till revisionen.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.