Installationsguide

To ting skal være aktive på dit site: den meddelelse, dine besøgende ser, og en lille offentlig fil, der erklærer din brug af AI (ditsite.dk/.well-known/ai-disclosure.json). Snippet-tagget indsættes én gang, er identisk på hver side, og din erklæring afgør, hvilke meddelelser der vises hvor. Vælg din platform nedenfor; de fleste tager cirka ti minutter.

1 · Vis meddelelserne

Banner og AI-mærkater, dine besøgende ser på siden.

2 · Udgiv din erklæring

ai-disclosure.json, en offentlig fil, der kan læses fra dit eget domæne.

Du er færdig, når

tjekkeren viser Niveau 2 · Vist.

Vælg din platform

WordPress

  1. Installer pluginnet

    I din WordPress-administration: Plugins → Add New → Upload Plugin, vælg filen, du downloadede nedenfor, og klik derefter på Activate.

    Download AIDisclose-pluginnet (.zip)

  2. Lad det klare begge opgaver

    Pluginnet viser meddelelserne og udgiver din erklæringsfil automatisk. Marker AI-indhold på ethvert indlæg eller billede med dets "AI content"-skifteknap. Ingen kodeændringer.

  3. Verificér

    Færdig, når tjekkeren viser Niveau 2 · Vist.

    Kør tjekkeren

Verificér

Kør tjekkeren. Den bekræfter tre ting: din erklæringsfil er gyldig, snippettet kører, og meddelelserne vises faktisk på siden. (For ingeniører: tjek C1, C3 og C4 til C6.)

Kør tjekkeren

Hvis dit site blokerer vores tjekker (AIDiscloseBot)

Scanninger og dokumentationsoptagelser kommer fra AIDiscloseBot/1.0. Den læser kun offentlige sider: den logger aldrig ind, indsender aldrig formularer og adlyder robots.txt. Hvis din robots.txt eller botbeskyttelse blokerer ukendte crawlere, skal du tillade den eksplicit:

robots.txt
User-agent: AIDiscloseBot
Allow: /

Er det en risiko at tillade den? Nej. En tilladelse i robots.txt giver ingen adgang. Den fortæller kun høflige bots, at de må læse sider, der allerede er offentlige. Alle kan forfalske en User-Agent-streng, men en forfalsker opnår intet, som dine offentlige sider ikke allerede giver.

Hvis du styrer trafik med en WAF eller bot-manager, må du aldrig tillade adgang alene på baggrund af User-Agent. Kombiner det med kildeverifikation. Vi offentliggør vores crawleridentitet, og de udgående IP-intervaller efterhånden som de tildeles, på aidisclose.io/bot.json.

Kør tjekkeren

Avanceret

Theming with CSS variables, custom copy, single-page-app setup, and the full option reference are in the snippet reference.

Lås scriptet til en bestemt version (SRI)

Et integritetshash i script-tagget får browseren til at nægte at køre en ændret fil. Lås den versionerede URL, og generer hashet fra præcis den fil, du udruller:

shell
curl -sO https://cdn.aidisclose.io/v1/aidisclose.js
openssl dgst -sha384 -binary aidisclose.js | openssl base64 -A
Server filen selv (nginx / Apache)

For servere, du kontrollerer, kan du levere den downloadede ai-disclosure.json direkte:

nginx
location = /.well-known/ai-disclosure.json {
  alias /var/www/site/ai-disclosure.json;
  default_type application/json;
  add_header Cache-Control "max-age=3600";
}
Apache
Alias "/.well-known/ai-disclosure.json" "/var/www/site/ai-disclosure.json"
<Files "ai-disclosure.json">
  ForceType application/json
</Files>
Server den dashboard-hostede fil fra dit eget domæne

Din server videresender forespørgsler til den ene adresse til os: du redigerer filen i dashboardet, og den leveres stadig fra dit domæne. Dashboardet viser disse forudfyldt med din sitenøgle.

nginx
location = /.well-known/ai-disclosure.json {
  proxy_pass https://cdn.aidisclose.io/v1/hosted-manifest/YOUR_SITE_KEY;
  proxy_set_header Host cdn.aidisclose.io;
  proxy_ssl_server_name on;
}
Cloudflare Worker
export default {
  async fetch(request) {
    const url = new URL(request.url);
    if (url.pathname === "/.well-known/ai-disclosure.json") {
      return fetch("https://cdn.aidisclose.io/v1/hosted-manifest/YOUR_SITE_KEY");
    }
    return fetch(request);
  }
};
Single-page-apps og statiske hosts

Frameworks, der omskriver hver rute til index.html, og nogle statiske hosts opfanger /.well-known/ai-disclosure.json og returnerer din apps HTML med statussen 200. Filen ser ud til at være committet, men checkeren læser HTML i stedet for manifestet. To løsninger: udeluk /.well-known/ fra catch-all-omskrivningen, så den statiske fil leveres med typen application/json, eller føj data-aidisclose="YOUR_SITE_KEY" til script-tagget for at indlæse det AIDisclose-hostede manifest og helt undlade at levere filen.

netlify.toml / vercel.json
# netlify.toml: serve the real file before the SPA fallback
[[redirects]]
  from = "/*"
  to = "/index.html"
  status = 200
  force = false   # a real file at the path wins over this fallback

# vercel.json: rewrite everything EXCEPT /.well-known to the app
{ "rewrites": [
  { "source": "/((?!\.well-known/).*)", "destination": "/index.html" }
] }