Python til SEO betyder at bruge korte scripts til de gentagne dele af søgearbejdet: at tjekke hundredvis af URL’er, trække titler og metabeskrivelser ud og skille eksporter fra Search Console ad hurtigere, end et regneark tillader. Du behøver ikke blive udvikler for at få værdi ud af det. I 2026 kan du beskrive opgaven for ChatGPT eller Claude i almindeligt sprog, få et fungerende script tilbage, køre det og kontrollere resultatet.
Den færdighed, der tæller, er ikke at huske syntaks udenad. Det er at vide, hvad du skal bede om, hvordan du kører koden sikkert, og hvordan du ser, om outputtet er rigtigt. En begynder, der kan læse et script på 20 linjer og opdage et forkert kolonnenavn, får mere fra hånden end en, der kopierer kode i blinde.
Denne guide giver dig et setup, der tager omkring ti minutter, et promptmønster, der giver brugbare scripts, og fire testede eksempler, du kan køre i dag: en statuskodetjekker, en udtrækker af titler og metabeskrivelser, en finder af “striking distance”-søgeord i data fra Search Console og en periodesammenligning, der viser, hvilke sider der har mistet klik.
Alle scripts nedenfor blev kørt på testdata før udgivelsen, så du kan kopiere dem som udgangspunkt og tilpasse dem med din AI-assistent.
Hvad kan Python egentlig gøre for en SEO-specialist?
Python er mest nyttigt dér, hvor du gentager det samme tjek på mange rækker data. Hvis en opgave tager dig mere end en time i et regneark, eller du laver den hver måned, er den en kandidat til et script.
Typiske begyndervenlige opgaver omfatter:
- Tjek af statuskoder og redirects for en liste af URL’er efter en migrering
- Udtræk af titler, metabeskrivelser, H1’ere eller canonical tags fra mange sider
- Filtrering og gruppering af eksporter fra Search Console efter søgning, side eller mønster
- Sammenligning af to perioder for at finde sider eller søgninger, der har mistet trafik
- Sammenfletning af data fra forskellige værktøjer på en fælles URL-kolonne
- Udtræk af flere rækker fra Search Console, end grænsefladen lader dig eksportere
Python erstatter ikke en crawler som Screaming Frog eller en alt-i-en-platform. Det udfylder hullerne mellem dem: det enkeltstående spørgsmål, dit værktøj ikke besvarer, eller den rapport, du bygger på samme måde hver måned. Vores liste over de SEO-værktøjer, vi bruger, dækker den kommercielle del af værktøjskassen.
Skal du kunne kode, før du starter?
Nej, men du skal kunne læse kode godt nok til at kontrollere den. AI-assistenter skriver hurtigt kode, der ser plausibel ud, og plausibel er ikke det samme som korrekt. Et script kan køre uden fejl og alligevel tælle den forkerte kolonne eller springe halvdelen af dine URL’er over.
Et realistisk mål for en begynder er dette: du kan åbne et script, finde det sted, hvor det læser inputfilen, se hvilke kolonner det bruger, og forstå hvad det skriver ud. Det niveau tager et par aftener, ikke måneder. Bed assistenten om at tilføje kommentarer til hver blok, og bed den forklare enhver linje, du ikke forstår.
Tre vaner beskytter dig mod de fleste fejl:
- Test på en lille stikprøve først. Kør scriptet på 10 URL’er eller 20 rækker, hvor du allerede kender svaret.
- Stikprøvekontrollér outputtet. Åbn tre resultater manuelt i browseren eller i den oprindelige eksport, og sammenlign.
- Indæt aldrig hemmeligheder. Giv ikke en AI-chat dine API-nøgler, kunders adgangskoder eller persondata fra eksporter.
Hvad er det enkleste setup til at køre SEO-scripts?
Du har to gode muligheder: en notebook i browseren uden noget at installere eller Python på din egen computer.
| Mulighed | Bedst til | Det skal du vide |
|---|---|---|
| Google Colab (notebook i browseren) | De første eksperimenter, deling med kolleger | Ingen installation. Upload en CSV-fil til sessionen, og kør cellerne én ad gangen. Filerne forsvinder, når sessionen slutter, medmindre du gemmer dem i Drive. |
| Python på din computer | Faste rapporter, større filer, planlagte opgaver | Installér Python 3 fra python.org, og kør derefter pip install requests beautifulsoup4 pandas i en terminal. Kør scripts med python script_name.py. |
| Kodeeditor (valgfri) | Behagelig læsning og redigering af scripts | VS Code eller en anden editor med understøttelse af Python fremhæver fejl og gør indrykning synlig. |
Eksemplerne i denne guide bruger tre biblioteker. requests henter websider. Beautiful Soup (pakkenavn beautifulsoup4) læser HTML og finder tags. pandas arbejder med tabeller, og det er det, de fleste SEO-data er. Alle tre er gratis, grundigt dokumenterede og velkendte for AI-assistenter, hvilket betyder, at genereret kode, der bruger dem, typisk er pålidelig.
Hvordan skal du prompte ChatGPT eller Claude til at skrive et SEO-script?
Beskriv input, output og særtilfælde, ikke kun målet. “Skriv et Python-script, der tjekker mine URL’er” giver generisk kode. En specifik prompt giver noget, du kan køre i første forsøg.
En promptstruktur, der virker godt:
- Kontekst: “Jeg er SEO-specialist, ikke udvikler. Jeg kører Python 3 lokalt.”
- Input: “Jeg har en fil urls.txt med én URL pr. linje.” Eller indæt overskriftsrækken og to eksempelrækker fra din CSV-fil.
- Opgave: “Registrér for hver URL HTTP-statuskoden uden at følge redirects og redirect-målet, hvis der er et.”
- Output: “Gem en CSV-fil med kolonnerne url, status, redirect_to_or_error, og udskriv resultaterne.”
- Særtilfælde: “Stop ikke, hvis en URL får timeout, eller domænet ikke kan slås op. Brug en timeout på 10 sekunder.”
- Begrænsninger: “Brug kun requests, Beautiful Soup og pandas. Tilføj en kommentar over hver blok.”
Når scriptet fejler, så indæt hele fejlmeddelelsen i chatten igen, og skriv, hvad du kørte. Både ChatGPT og Claude er gode til at rette deres egen kode, når de ser den præcise traceback. Hvis outputtet ser forkert ud i stedet for at crashe, så beskriv, hvad du forventede, og hvad du fik, med én eksempelrække.
De fire eksempler nedenfor blev bygget på den måde og derefter trimmet og testet.
Eksempel 1: hvordan tjekker du statuskoder for en liste af URL’er?
Dette script læser URL’er fra en tekstfil, forespørger hver enkelt uden at følge redirects og gemmer statuskoderne i en CSV-fil. Det er det første, du skal køre efter en migrering, en opdatering af redirect-kortet eller en oprydning i sitemappet.
Opret en fil kaldet urls.txt med én URL pr. linje, gem scriptet ved siden af som check_status.py, og kør det.
import csv
import requests
HEADERS = {"User-Agent": "Mozilla/5.0 (compatible; MySEOCheck/1.0)"}
with open("urls.txt", encoding="utf-8") as f:
urls = [line.strip() for line in f if line.strip()]
results = []
for url in urls:
try:
r = requests.get(url, headers=HEADERS, timeout=10, allow_redirects=False)
results.append([url, r.status_code, r.headers.get("Location", "")])
except requests.RequestException as e:
results.append([url, "ERROR", type(e).__name__])
with open("status_report.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["url", "status", "redirect_to_or_error"])
writer.writerows(results)
for row in results:
print(*row, sep="\t")Det skal du kigge efter i outputtet:
- 200: siden indlæses. Godt for URL’er, der skal være live og kunne indekseres.
- 301 eller 308: permanent redirect. Tjek, at målet i tredje kolonne er den rigtige side og ikke bare forsiden som standard.
- 302 eller 307: midlertidig redirect. Ofte et tegn på, at en permanent redirect er sat forkert op.
- 404 eller 410: siden er væk. Fint, hvis det er meningen, et problem, hvis URL’en står i dit sitemap eller dine interne links.
- 5xx eller ERROR: server- eller forbindelsesproblem. Kør igen senere; hvis det fortsætter, så tag det op med din udvikler.
Scriptet sætter allow_redirects=False med vilje. Hvis du lader requests følge redirects, vil en kæde af 301’ere dukke op som 200, og du ville helt overse redirecten. Bed din assistent om en version, der følger kæden og oplister hvert hop, hvis du gennemgår redirect-kæder.
Vær høflig med mængden af forespørgsler. Til nogle få hundrede URL’er på dit eget site er det fint. Til tusindvis skal du bede assistenten om at tilføje en kort pause mellem forespørgslerne, og ret aldrig et script som dette mod et site, du ikke har tilladelse til at teste.
Eksempel 2: hvordan trækker du titler og metabeskrivelser ud i bulk?
Dette script henter hver URL, læser HTML’en med Beautiful Soup og registrerer titlen, metabeskrivelsen og deres længder. Det er en hurtig måde at finde manglende, tomme eller duplikerede snippets på en gruppe sider, for eksempel alle produkter i én kategori.
import csv
import requests
from bs4 import BeautifulSoup
HEADERS = {"User-Agent": "Mozilla/5.0 (compatible; MySEOCheck/1.0)"}
def get_title_and_description(html):
soup = BeautifulSoup(html, "html.parser")
title = soup.title.get_text(strip=True) if soup.title else ""
tag = soup.find("meta", attrs={"name": lambda v: v and v.lower() == "description"})
description = tag.get("content", "").strip() if tag else ""
return title, description
with open("urls.txt", encoding="utf-8") as f:
urls = [line.strip() for line in f if line.strip()]
with open("meta_report.csv", "w", newline="", encoding="utf-8") as out:
writer = csv.writer(out)
writer.writerow(["url", "title", "title_length", "description", "description_length"])
for url in urls:
try:
r = requests.get(url, headers=HEADERS, timeout=10)
except requests.RequestException:
continue
if r.status_code != 200:
continue
title, desc = get_title_and_description(r.text)
writer.writerow([url, title, len(title), desc, len(desc)])
print(url, "|", title or "MISSING TITLE", "|", desc or "MISSING DESCRIPTION")To detaljer gør det mere robust end det første udkast, de fleste assistenter leverer. For det første finder det metabeskrivelsen uanset store og små bogstaver, fordi nogle CMS-skabeloner skriver name="Description". For det andet springer det svar over, der ikke er 200, så fejlsider ikke forurener rapporten med titler som “Page not found”.
Åbn meta_report.csv i dit regneark, og sortér efter title_length og description_length. Nul betyder, at den mangler. Sortér derefter efter titel for at finde dubletter. Længde er kun en grov rettesnor: Google omskriver snippets, når den mener, at en anden tekst passer bedre til søgningen, så se det som et hygiejnetjek, ikke en ranking-løsning. Vores guide til on-page SEO forklarer, hvad du skal skrive, når du ved, hvilke sider der kræver arbejde.
Én begrænsning: requests henter den rå HTML, så titler, som scripts i browseren tilføjer efter indlæsning, vises ikke. Til sites, der i høj grad bygger siden op i browseren, kan du få brug for en headless browser, hvilket er et skridt ud over begynderniveau.
Eksempel 3: hvordan finder du “striking distance”-søgeord i en eksport fra Search Console?
Dette script læser Queries-filen fra en eksport fra Search Console og oplister søgninger med et betydeligt antal visninger, hvor din gennemsnitlige placering ligger mellem 4 og 15. Det er ofte de hurtigste gevinster: Google anser allerede siden for relevant, men den ligger lige under eller nederst på første side.
I Search Console skal du åbne rapporten Effektivitet, vælge en periode, klikke på Eksportér og vælge CSV. Du får en ZIP-fil med flere CSV-filer. Dette script bruger Queries.csv.
import pandas as pd
df = pd.read_csv("Queries.csv")
df.columns = ["query", "clicks", "impressions", "ctr", "position"]
df["ctr"] = df["ctr"].str.rstrip("%").astype(float)
opportunities = df[
df["position"].between(4, 15) & (df["impressions"] >= 500)
].sort_values("impressions", ascending=False)
print(opportunities.to_string(index=False))
opportunities.to_csv("striking_distance.csv", index=False)Scriptet omdøber kolonnerne undervejs, fordi eksporten bruger etiketter som “Top queries” og gemmer CTR som tekst med procenttegn. Når CTR konverteres til et tal, kan du sortere og filtrere på den. Hvis din Search Console-grænseflade er på et andet sprog, ændres kolonnenavnene, men rækkefølgen forbliver den samme, og derfor tildeler scriptet navne efter position.
Juster de to tærskelværdier til dit site. En lille lokal virksomhed kan bruge 50 visninger i stedet for 500. En stor webshop kan indsnævre intervallet til placering 5 til 12. Find for hver søgning i outputtet den side, der ranker, og tjek derefter, om søgningen faktisk bliver besvaret i titlen, H1’eren og de første afsnit.
En grænse, der er værd at kende: Google oplyser, at eksporter fra Search Console-grænsefladen afkortes til 1.000 rækker. For større sites returnerer Search Console API op til 25.000 rækker pr. forespørgsel, og du kan bladre igennem flere med parameteren startRow. Opsætning af API-adgang kræver et Google Cloud-projekt og legitimationsoplysninger, hvilket er et godt projekt nummer to, når du er fortrolig med disse scripts.
Eksempel 4: hvordan ser du, hvilke sider der har mistet klik mellem to perioder?
Dette script sammenligner to Pages-eksporter fra Search Console og oplister de sider med det største fald i klik ved siden af deres gennemsnitlige placering før og efter. Det er kernen i et månedligt SEO-tjek og langt hurtigere end at matche rækker i hånden.
Eksportér rapporten Sider to gange: én gang for den seneste periode (gemt som Pages_last.csv) og én gang for den forrige periode (Pages_prev.csv). Brug perioder af samme længde, og hvis din forretning er sæsonpræget, så sammenlign med de samme uger året før.
import pandas as pd
cols = ["page", "clicks", "impressions", "ctr", "position"]
now = pd.read_csv("Pages_last.csv", names=cols, header=0)
before = pd.read_csv("Pages_prev.csv", names=cols, header=0)
merged = now.merge(before, on="page", how="outer", suffixes=("_now", "_before"))
merged[["clicks_now", "clicks_before"]] = merged[["clicks_now", "clicks_before"]].fillna(0).astype(int)
merged["click_change"] = merged["clicks_now"] - merged["clicks_before"]
losers = merged.sort_values("click_change").head(10)
print(losers[["page", "clicks_before", "clicks_now", "click_change",
"position_before", "position_now"]].to_string(index=False))Den ydre sammenfletning (outer merge) er vigtig. En side, der er forsvundet fra den seneste eksport, viser clicks_now som 0 og position_now som tom, og det er præcis den type side, du vil fange. En ny side vises med clicks_before som 0. Et almindeligt opslag i et regneark skjuler ofte begge tilfælde.
Læs outputtet i par. Mistede klik med en dårligere placering peger på et ranking-problem: tjek siden, dens konkurrenter og eventuelle nylige ændringer. Mistede klik med en stabil placering betyder som regel færre søgninger eller en ændret resultatside, for eksempel en ny AI Overview eller flere annoncer. Vores guide til tracking af SEO-resultater forklarer, hvordan du skelner mellem de årsager.
Hvilke SEO-opgaver bør du scripte næste gang, og hvilke bør du overlade til værktøjer?
Script opgaver, der er specifikke for dit site eller din rapportering; køb værktøjer til opgaver, der kræver skala eller infrastruktur.
| Opgave | Python-script | Dedikeret værktøj |
|---|---|---|
| Statuskoder for en kendt liste af URL’er | Ja, enkelt og hurtigt | Fungerer også fint i enhver crawler |
| Fuld crawl af sitet med rendering | Muligt, men tager lang tid at bygge | Bedre: crawler-software |
| Tilpassede rapporter fra Search Console | Ja, ideelt med pandas | Looker Studio til dashboards |
| Sammenkædning af data fra flere værktøjer | Ja, merge i pandas på URL | Regneark har svært ved store mængder |
| Rank tracking over tid | Anbefales ikke | Bedre: rank tracker |
| Gruppering af søgeord efter emne | Ja, med hjælp fra en AI-assistent | Nogle platforme har det indbygget |
| Backlinkdata | Kun via et betalt API | Bedre: backlinkværktøj |
Gode næste projekter: gruppering af søgninger efter et ord, de indeholder, for eksempel “pris” eller et bynavn, og sammenkædning af sidedata fra Search Console med konverteringer fra GA4 på URL’en.
Hvordan bruger du AI-assistenter til at forstå kode, ikke kun skrive den?
Bed om forklaringer på det niveau, du har brug for, og test derefter din forståelse ved at ændre én ting. Indæt et script, og spørg: “Forklar det linje for linje for en, der kan Excel, men ikke Python.” Stil derefter et konkret spørgsmål som “Hvad skal jeg ændre for også at trække H1’eren ud?”, og lav ændringen selv, før du beder om svaret.
Det mest værdifulde opfølgende spørgsmål er “Hvad kunne få dette script til at give forkerte resultater uden en fejl?” Det får assistenten til at opliste tavse fejlkilder som forkert tegnkodning, duplikerede rækker eller et filter, der fjerner mere, end du forventer.
Hvornår giver det mening at inddrage Marketer Coffee?
Scripts besvarer spørgsmål; de afgør ikke, hvilke spørgsmål der er vigtige. Marketer Coffee er et AI SEO- og GEO-bureau, og vi bruger denne type automatisering i større projekter: tekniske oprydninger, indholdsprogrammer og arbejde med AI-synlighed. To resultater fra vores kunder i brancher, der ikke har noget med eksemplerne i denne guide at gøre:
- Aldi.pl (detailhandel). Organiske klik voksede fra 367.127 til 852.724 om måneden på 12 måneder (+132 %) gennem produktindhold, Product-schema, en slankere arkitektur og samlede butiksdata. Læs kundecasen om Aldi.
- Planika (designpejse). Syv artikler lokaliseret til USA tog et site, som Google ikke havde indekseret, til 1.052 månedlige besøg fra USA, og Ahrefs registrerede 401 omtaler i Google AI Overviews, 136 omtaler i Perplexity og 20 omtaler i ChatGPT. Læs kundecasen om Planika.
Hvem vi passer til: virksomheder med store eller internationale sites, hvor dataarbejde, indhold og AI-søgning kræver én samlet plan. Hvem vi ikke passer til: alle, der kun har brug for at få skrevet et enkelt script; en AI-assistent og denne guide vil tjene dig bedre og koster ingenting.
Hvis du vil se, hvordan AI-søgemaskinerne i dag beskriver dit site, så kør vores gratis analyse af AI-synlighed. Læs mere om ydelsen på vores side om AI SEO.
Ofte stillede spørgsmål om Python til SEO
Er Python værd at lære til SEO i 2026?
Ja, på et grundlæggende niveau. Når ChatGPT eller Claude skriver det meste af koden, ligger værdien i at vide, hvad du skal bede om, og hvordan du kontrollerer resultatet. Et par aftener med øvelse er nok til at automatisere statustjek, gennemgang af metadata og rapporter fra Search Console.
Kan ChatGPT eller Claude skrive SEO-scripts, der virker i første forsøg?
Ofte, hvis du beskriver inputfilen, outputkolonnerne og særtilfældene. Test altid på en lille stikprøve, hvor du kender svaret, og indæt hele fejlmeddelelsen hos assistenten, hvis noget fejler.
Hvilke Python-biblioteker bør en SEO-begynder lære først?
requests til at hente sider, Beautiful Soup til at læse HTML og pandas til at arbejde med CSV- og regnearksdata. De tre dækker de fleste SEO-scripts for begyndere.
Hvordan får jeg mere end 1.000 rækker ud af Search Console?
Eksporten fra grænsefladen afkortes til 1.000 rækker. Search Console API returnerer op til 25.000 rækker pr. forespørgsel og understøtter paginering med startRow, så et Python-script, der bruger API’et, kan hente langt større datasæt.
Er det sikkert at køre SEO-scripts mod et hvilket som helst website?
Kør dem på sites, du ejer eller har tilladelse til at teste, hold mængden af forespørgsler moderat, sæt en timeout, og tilføj pauser ved store lister. Del aldrig API-nøgler eller kundedata i en AI-chat.
Hvad skal du huske om Python til SEO?
Start i det små, test på data, du kender, og lad AI-assistenten skrive, mens du tænker. De fire scripts i denne guide dækker de mest almindelige behov for begyndere: statuskoder, metadata, striking distance-søgninger og periodesammenligninger. Hvert script erstatter en tilbagevendende regnearksopgave og kan udvides én prompt ad gangen.
Hvis du hellere vil have et team, der kombinerer denne type analyse med indhold og strategi for AI-søgning, så book en gratis konsultation.
Kilder: Google Search Console Hjælp, “Export data directly from a Search Console report” (eksportgrænse på 1.000 rækker); Google for Developers, Search Console API, Search Analytics: query reference (rowLimit 1 til 25.000, startRow); officiel dokumentation for requests, Beautiful Soup og pandas; scripts testet af Marketer Coffee på testdata med Python 3.13 (november 2026); Marketer Coffee, kundecases om Aldi og Planika (andre brancher).







