Content-Signal i robots.txt når ingen av robotene: vår egen tabbe

Content-Signal i robots.txt når ingen av robotene: vår egen tabbe

Sist verifisert: 18. september 2026
12 min lesetid
Guide
500+ WP-prosjekter
Teknisk SEO

Forbeholdet vårt om AI-trening var skrevet til ingen. Linjen Content-Signal: search=yes, ai-input=yes, ai-train=no sto i robots.txt på wppoland.com nøyaktig én gang, i gruppen User-agent: *, og under den lå tjue navngitte robotgrupper.

Etter RFC 9309 arver ingen av de tjue gruppene noe som helst fra stjernegruppen. GPTBot, ClaudeBot, PerplexityBot, Google-Extended og resten av listen leste bare sine egne seksjoner, og der sto ikke den linjen.

Vi skriver om dette fordi det er vår fil og vår tabbe. Vi har gjennomgått robots.txt for å se om den blokkerer noe ved et uhell, aldri for å se om erklæringen i det hele tatt når mottakeren.

Det er to ulike spørsmål, og bare det første har et verktøy som svarer på det.

#Hva som faktisk sto i filen

Strukturen så ut som den gjør i de fleste filene vi har sett: én generell gruppe øverst, og under den en liste med navngitte roboter med utvidede Allow-regler for maskinlesbare endepunkter.

User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
Disallow: /cdn-cgi/

Sitemap: https://wppoland.com/sitemap-index.xml
Agentmap: https://wppoland.com/.well-known/ai-catalog.json

User-agent: GPTBot
Allow: /
Allow: /llms.txt
Allow: /facts.json

User-agent: ClaudeBot
Allow: /

User-agent: PerplexityBot
Allow: /

Det ser ryddig ut. Signalet er der, de navngitte gruppene er der, agentendepunktene er listet opp for seg.

Problemet er at disse to tingene ikke har kontakt med hverandre. Leser du filen som et dokument, ser du en policy øverst og et sett tillatelser under, og øyet legger til en sammenheng mellom dem som parseren ikke kjenner til. Parseren leser ingen dokumenter. Den matcher ett token mot en liste med navn, beholder blokken som vinner, og kaster resten av filen før den har lest et eneste direktiv.

#Hvorfor én linje ikke dekker hele filen

Klienten sammenligner produkttokenet sitt med navnene i User-agent-linjene, uten hensyn til store og små bokstaver, og bruker én gruppe: den som nevner den.

Stjernen er ikke det minst spesifikke mønsteret, den er reserveløsningen, og RFC 9309 griper til den bare når ingen gruppe nevner klienten ved navn. Finnes det en navngitt gruppe, bruker klienten bare direktivene der, og stjernegruppen slutter å angå den i sin helhet.

Den siste setningen er hele feilen. Den leses som selvsagt i spesifikasjonen, og slutter å være selvsagt i det øyeblikket du holder den opp mot en fil du har skrevet selv, for en fil du har skrevet selv bærer din hensikt, og hensikten er usynlig for den leseren som betyr noe.

Dette er ikke et unntak for Content Signals. Den samme regelen har alltid gjeldt Allow og Disallow, og det er nøyaktig derfor en fil der noen har lagt Disallow: /wp-admin/ bare i stjernegruppen, ikke beskytter noe som helst mot en robot med egen seksjon lenger nede.

Forskjellen ligger i det som skjer etterpå. Med Disallow er konsekvensen synlig: siden dukker opp i indeksen, eller den gjør det ikke, og en uke med indekseringsdata forteller hvilken av delene det ble. Med Content-Signal er det ingenting å se, i noen retning. En rettighetserklæring har ingen tilbakekobling, så en feil og en riktig erklæring gir den samme observerbare historien så lenge du gidder å følge med.

Content Signals er et forslag fra Cloudflare, ikke en del av RFC 9309, og Cloudflare slår policyen på som standard i sin forvaltede robots.txt. Gruppemekanismen som linjen bor i, er likevel i sin helhet mekanismen fra RFC 9309, så regelen om én gruppe gjelder den like fullt som alt annet i filen. Et nytt direktiv i en gammel beholder arver beholderens regler, også de reglene den som la inn direktivet aldri slo opp.

#Tre signaler, og det de ikke lover

Spesifikasjonen definerer tre signaler, hvert med verdien yes eller no:

SignalHva det gjelder
searchå bygge en søkeindeks og returnere treff, altså lenker og korte utdrag
ai-inputå mate innhold inn i en AI-modell i svarøyeblikket, altså RAG og grunning av svar
ai-traintrening og finjustering av modeller

Settet vårt search=yes, ai-input=yes, ai-train=no er et bevisst valg, og avveiningen i det fortjener å sies rett ut. Vi vil bli sitert i generative svar, for det er i dag en av kanalene noen finner oss gjennom. Vi vil ikke gi fra oss korpuset til trening, for en trent modell bærer teksten videre uten noen vei tilbake til nettstedet den kom fra.

Ja til det første og nei til det andre betyr at vi godtar at den samme roboten kan gjøre begge jobbene på ulike dager, og at vi stoler på at den holder dagene fra hverandre. Fravær av signal betyr noe tredje enn no: nettstedseieren verken gir eller nekter samtykke den veien. Taushet er altså ikke et avslag her, og det er hele grunnen til at linjen finnes.

Ingen av signalene blokkerer noe. Det er en tekstlinje i en fil klienten kan hente eller la være, lese eller la være, respektere eller la være. Serveren svarer på forespørselen uansett hva som står i filen.

Blokkering er et eget lag, vurdert før applikasjonen, og gjøres med WAF-regler, ratebegrensning eller verifisering av robotens identitet. Det laget koster noe: det kjører på hver eneste forespørsel, det kan ta feil om et menneske, og det må vedlikeholdes etter hvert som identitetssignalene endrer seg. En erklæring koster ingenting og håndhever ingenting, og det er en grei byttehandel så lenge du vet hvilken av de to du nettopp rullet ut. Signalet er verdt nøyaktig så mye som en utvetydig beskjed sendt til rett adresse. Vår var utvetydig og sendt til feil.

#Sjekk din egen fil med én kommando

Det tar noen sekunder og virker på et hvilket som helst domene:

curl -s https://dittdomene.no/robots.txt \
  | awk 'tolower($0) ~ /^user-agent:/ {ua++} tolower($0) ~ /^content-signal:/ {cs++} END {print "User-agent-grupper: " ua "\nContent-Signal-linjer: " cs}'

Ett forbehold før du handler på utskriften: den teller User-agent-linjer og ikke grupper, og ABNF-en i RFC 9309 tillater flere User-agent-linjer i starten av én og samme gruppe.

Har du stablet navn på den måten, melder kommandoen et avvik du ikke har, og da er listen fra den andre kommandoen riktigere enn regnestykket fra den første.

Er antallet grupper større enn antallet signaler, forteller differansen hvor mange grupper som ikke ser forbeholdet ditt. Hos oss var svaret tjueen mot én.

En grundigere variant skriver ut navnet på gruppene der signalet mangler:

curl -s https://dittdomene.no/robots.txt \
  | awk '/^[Uu]ser-agent:/ {if (name != "" && !sig) print "mangler signal: " name; name=$2; sig=0} /^[Cc]ontent-[Ss]ignal:/ {sig=1} END {if (name != "" && !sig) print "mangler signal: " name}'

Den andre kommandoen er den som er verdt å koble inn i en pipeline, for utdataene er en liste over ting som skal fikses, ikke et tall som skal tolkes.

#Slik retter du det

Rettelsen er kjedelig: gjenta Content-Signal-linjen i hver gruppe den skal gjelde for. Det finnes ingen snarvei, ingen kortform og ingen arv du kan slå på.

User-agent: *
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
Disallow: /cdn-cgi/

User-agent: GPTBot
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /
Allow: /llms.txt
Allow: /facts.json

User-agent: ClaudeBot
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /

User-agent: PerplexityBot
Content-Signal: search=yes, ai-input=yes, ai-train=no
Allow: /

Endringen rullet vi ut 18. september 2026, samme dag som dette innlegget. Signalet står nå i 18 av 23 grupper, og de fem vi hoppet over er skrapere som allerede har et Disallow hos oss, der en tillatelse bare ville gjort budskapet uklart.

Underveis i rettelsen må du avgjøre én ting som en fil med gjentatt linje ikke avgjør for deg: om det samme settet med signaler passer for hver gruppe. For en indekserende robot og for en robot som samler treningskorpus er svaret ulikt, og en fil med tjue identiske linjer antyder at ingen har tenkt over det. En gruppe der search=yes ikke gir mening, fordi klienten ikke bygger noen indeks, bør ha sin egen formulering, og det er når du skriver den formuleringen at filen slutter å være en kopi og blir en policy.

#Det andre vi manglet: grupper for de enkelte rollene

Under den samme gjennomlesningen kom det fram at vi hadde ClaudeBot-gruppen alene, og manglet de to andre: Claude-User, som håndterer nedlastinger initiert av brukeren, og Claude-SearchBot, som håndterer grunning av søk.

Det er tre ulike roller og ulike intensjoner på klientsiden. En robot som henter en side fordi et menneske nettopp limte inn adressen i en samtale, gjør noe annet enn en robot som bygger korpus, og det er fornuftig å svare den noe annet.

Effekten av å mangle de gruppene er nøyaktig den samme som over, bare fra motsatt kant: en klient uten egen seksjon faller tilbake på stjernegruppen. I vårt tilfelle betydde det at Claude-User så det riktige signalet, for i stjernen sto det.

Altså: i en fil der signalet ikke nådde tjue navngitte roboter, nådde det de navnløse. Stikk motsatt av det vi hadde tenkt, og produsert av den samme regelen som gjør nøyaktig det den sier.

#Hvorfor denne feilen overlever en gjennomgang så lett

Tre grunner, alle strukturelle, ingen av dem uoppmerksomhet.

En robots.txt leses ovenfra og ned, og den generelle seksjonen ser overordnet ut. Å legge noe inn i den trigger intuisjonen fra CSS eller fra serverkonfigurasjon, der den generelle innstillingen er standard og den spesifikke overstyrer den. I RFC 9309 finnes ingen overstyring. Der finnes et valg av én gruppe og forkasting av resten av filen.

Grunn to: det finnes ikke noe verktøy som melder fra. Robots.txt-testere sjekker om en gitt adresse er tillatt for en gitt robot, og vet ingenting om Content-Signal, for det er ikke et direktiv fra RFC-en. Linjen passerer som kommentar i validatorens øyne og som policy i menneskets, og begge lesningene henger på greip hver for seg.

Grunn tre, og den viktigste: en rettighetserklæring har ingen tilbakemelding. Setter du Disallow feil, ser du det i indekseringsrapporten en uke senere. Setter du Content-Signal feil, skjer det ingenting som lar seg observere, og fravær av hendelse ser helt likt ut i begge tilfeller. Denne defektklassen må finnes ved å lese filen, ikke ved å se på virkningene, og det er ubehagelig å planlegge, for lesing har ingen utløser.

#Linjer utenfor grupper forvirrer, for de gjelder faktisk globalt

Det er én ting i denne filen som direkte inviterer til feil intuisjon. Ved siden av User-agent-gruppene kjenner robots.txt poster som er uavhengige av grupper, og Sitemap er en slik post. I filen vår står den etter stjernegruppen:

Sitemap: https://wppoland.com/sitemap-index.xml
Agentmap: https://wppoland.com/.well-known/ai-catalog.json

Sitemap gjelder hele filen uansett hvor du plasserer den og hvor mange grupper som ligger under. Ingen gjentar den tjue ganger, og ingen trenger det.

Et menneske som vet hvordan Sitemap oppfører seg, og som ser Content-Signal plassert i samme område av filen, to linjer over, har full rett til å anta at den linjen oppfører seg likedan.

Den gjør ikke det. Den ene er en global post, den andre et direktiv inne i en gruppe, og ingenting i syntaksen signaliserer det. Begge er en toleddet linje med kolon, satt ved siden av hverandre.

Praktisk lærdom når du leser andres fil: innrykk og rekkefølge betyr ingenting, det eneste som betyr noe er om direktivet er definert som gruppedirektiv. Allow, Disallow og Content-Signal er gruppedirektiver. Sitemap er det ikke.

#Det dette innlegget ikke avgjør

To ting lar vi bevisst ligge utenfor, for de er ikke våre.

Den første er den rettslige virkningen av forbeholdet. Content Signals viser til et rettighetsforbehold uttrykt i opphavsretten, og en slik tekst står faktisk i kommentaren øverst i filen vår. Om og når et slikt forbehold er virksomt, avgjøres av en jurist, ikke av den som redigerer robots.txt. Vårt eneste bidrag er teknisk: skal erklæringen ha noen vekt i det hele tatt, må den i det minste nå fram til klienten den er adressert til, og vår nådde ikke fram.

Den andre er hvordan de enkelte operatørene faktisk oppfører seg. Vi har ikke målt hvilken robot som leser Content-Signal, hvem som respekterer det, og hva de gjør med motstridende signaler i ulike grupper. Uten egen måling har vi ingenting å si her, og vi har ikke tenkt å gjenta andres tall.

Rettelsen vi beskriver er verdt å gjøre uavhengig av den kunnskapen, for den fikser en fil som sier noe annet enn forfatteren mente, og det er en defekt i seg selv.

#Hva du gjør med det i prosessen

Å sjekke rekkevidden til signalet er noen minutters engangsarbeid, men å vedlikeholde det er ikke en engangsjobb. Hver nye gruppe som legges til i filen, og de legges til jevnlig, for listen over AI-roboter vokser fra måned til måned, er en ny gruppe uten signal helt til noen husker det.

Derfor hører den andre kommandoen over hjemme i testene, ikke i et notat. En regel som sjekker seg selv, overlever; en regel nedskrevet i et dokument overlever til neste gang noen som ikke har lest dokumentet, redigerer filen.

Det er også verdt å huske hvor stor andel av trafikken vi snakker om. I målingen vår fra august 2026, beskrevet i innlegget om bottrafikk på en liten nettside, kom 72 % av forespørslene ikke fra en nettleser. robots.txt er det eneste stedet der vi i det hele tatt snakker med det flertallet, og det eneste dette flertallet vet om vilkårene våre. Er setningen i filen adressert til feil gruppe, er det ikke en myk feil, det er stillhet.

Den som får noe igjen for denne ryddejobben, er ikke først og fremst vi. Det er redaktøren som skal kunne svare på hva nettstedet tillater, juristen som skal kunne lese en entydig erklæring, og den neste utvikleren som legger til en ny robotgruppe og trenger at filen sier det den ser ut til å si.

#Kort sjekkliste

  • Tell User-agent-gruppene og Content-Signal-linjene i filen din. Stemmer ikke tallene, er differansen antall grupper uten forbehold.
  • Gjenta linjen i hver gruppe den skal gjelde for. Gjentakelsen er riktig form her, ikke en dublett.
  • Ta et bevisst valg om hver gruppe skal ha det samme settet med signaler. Tjue identiske linjer er som regel et tegn på at ingen tok noe valg.
  • Sjekk om du har egne grupper for ulike roller hos samme leverandør, for eksempel for brukerinitierte nedlastinger og for korpusinnsamling.
  • Koble sjekken inn i pipelinen. Robotlisten vokser, og hver ny gruppe starter uten signal.
  • Ikke innbill deg at signalet blokkerer noe. Blokkering er laget foran applikasjonen, dette er en erklæring.
Neste steg

Gjør artikkelen om til faktisk implementering

Denne blokken styrker intern lenking og sender leseren videre til de mest relevante tjenestene og innholdet.

Vil du få dette implementert på nettstedet ditt?

Hvis synlighet i Google og AI-systemer betyr noe, kan jeg bygge innholdsarkitektur, FAQ, schema og intern lenking for SEO, GEO og AEO.

Relevant klynge

Utforsk andre WordPress-tjenester og kunnskapsbase

Styrk virksomheten din med profesjonell teknisk støtte innen kjerneområdene i WordPress-økosystemet.

Leser en robot stjernegruppen når den har sin egen gruppe i robots.txt?#
Nei. RFC 9309 lar klienten bruke én gruppe, den som nevner produkttokenet dens, og behandler stjernegruppen som en reserve som bare gjelder når ingen gruppe nevner den. Det finnes ingen arv fra gruppen User-agent med stjerne. Har GPTBot sin egen seksjon, gjelder stjernegruppen den ikke i det hele tatt.
Hvor skal Content-Signal-linjen stå for at den faktisk skal virke?#
I hver eneste gruppe den skal gjelde for, hver for seg. Én linje i stjernegruppen dekker bare de robotene som ikke har sin egen seksjon. Gjentakelsen er riktig skrivemåte her, ikke en dublett som skal ryddes bort.
Er Content-Signal en del av robots.txt-standarden?#
Nei. Content Signals er et forslag fra Cloudflare, en ekstra linje i robots.txt-filen. Den arver likevel gruppesemantikken fra RFC 9309, så den er underlagt den samme regelen om én gruppe som Allow og Disallow.
Stopper ai-train=no at en modell trenes på innholdet?#
Nei. Dette er en erklæring, ikke en håndhevingsmekanisme. Serveren svarer fortsatt på forespørselen, og en tekstfil har ingen måte å tvinge noe som helst igjennom på klientsiden. Verdien i signalet ligger i at det er utvetydig og sendt til rett mottaker.
Hvordan sjekker jeg min egen fil med én kommando?#
Hent robots.txt og tell forekomstene av Content-Signal-linjer og User-agent-linjer. Er det tjue grupper og ett signal, ser nitten grupper ikke forbeholdet ditt. Ferdig kommando står i teksten.

Trenger du FAQ tilpasset bransje og marked? Vi lager en versjon som støtter dine forretningsmål.

Ta kontakt

Relaterte artikler

Googlebot og JSON-LD: ett unescape-gjennomløp

Google har endret JSON-LD-uttrekket og gjør nå bare ett gjennomløp med HTML-unescaping. Dobbelt escapede entiteter rulles ikke lenger ut, blokken slutter å parse og de strukturerte dataene forsvinner. Slik måler du ditt eget korpus og koder riktig.

Site reputation-policy i EØS fra 30. august 2026

Fra 30. august 2026 skiller Google effekten av site reputation manual actions etter søkerens sted. Utenfor EØS treffer degraderingen fortsatt den berørte delen. I EØS gjelder ikke den virkningen; seksjonen kan ranke selvstendig. Hvorfor parasite SEO ikke kommer tilbake - Norge er i EØS.