In Practice

Beyond the files

Discovery files are one lever. A handful of other mechanisms shape how AI systems identify and represent a business — some worth the effort, some only for particular kinds of site. Here is what each actually does.

Google Search

The preferred sources button

Google Search lets readers mark a site as a preferred source. Once they do, your content is more likely to surface in Top Stories and carries a “preferred” badge in AI Mode and AI Overviews. There is no file to publish and no markup to add — the button simply prompts a reader to make that choice.

Check eligibility first

Only domain and subdomain level sites appear in the source preferences tool — example.com and code.example.com qualify, example.com/blog does not. Open google.com/preferences/source?q=yourdomain.com and look for yourself. If you are not listed, neither implementation below will do anything.

Live example

This is the real button, rendered by Google's script on this page:

Nothing appears here if you block third-party scripts, or if Google does not serve a button for this domain — which is exactly the failure mode to weigh below.

Two ways to implement it

Google's script

Recommended by Google
html
<script async
  src="https://news.google.com/swg/js/v1/publisher.js"></script>

<div google-add-preferred-source-btn></div>

<!-- optional -->
<div google-add-preferred-source-btn
     data-theme="dark"
     data-lang="en"></div>
  • Official Google-branded button; far more clickable than a text link
  • data-theme and data-lang handle dark themes and locale
  • Updates itself if Google changes the button
  • Loads a third-party script — disclose it in your privacy notice
  • Renders nothing if the script is blocked or fails

Plain deeplink

No JavaScript
html
  • Nothing to load, nothing to disclose
  • Works with JavaScript off, and never renders empty
  • Style it to match your own design
  • No Google branding, so it reads as an ordinary link
  • You maintain the label and styling yourself

Load it where it belongs, not everywhere

If you use the script, put it on the one page carrying the button rather than in a global layout. That is what this site does — the SwG script loads on this page only, which is why the privacy notice can still say fonts are the only third-party request everywhere else.

Source: Google Search Central — preferred sources

Structured data

Organization markup

Schema.org Organization data in JSON-LD tells Google who you are in a form it already consumes at scale. Google uses it to disambiguate you from similarly named organisations, to choose which logo to show, and to populate knowledge panel details.

Google recommends placing it on your home page or a single page describing the organisation — an about page — rather than on every page. No property is strictly required; add the ones that are true.

JSON-LD
{
  "@context": "https://schema.org",
  "@type": "Organization",
  "name": "[Your Brand Name]",
  "legalName": "[Your Registered Business Name]",
  "alternateName": "[Accepted short form]",
  "url": "https://[www.example.com]",
  "logo": "https://[www.example.com]/logo.png",
  "description": "[The same summary used in llms.txt]",
  "foundingDate": "[YYYY-MM-DD]",
  "vatID": "[VAT number]",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "[Street]",
    "addressLocality": "[City]",
    "postalCode": "[Postcode]",
    "addressCountry": "[GB]"
  },
  "contactPoint": {
    "@type": "ContactPoint",
    "email": "[[email protected]]",
    "contactType": "customer support"
  },
  "sameAs": [
    "https://www.linkedin.com/company/[handle]",
    "https://github.com/[handle]"
  ]
}

This is the same data as identity.json

Deliberately so. identity.json serves AI systems reading discovery files; this JSON-LD serves crawlers reading your pages. Populate both from the same facts, and keep the logo minimum of 112×112px in mind. If the two ever disagree, you have introduced exactly the contradiction the file set exists to prevent.

Source: Google Search Central — Organization structured data · Validate with the Rich Results Test

Indexing

IndexNow

IndexNow lets you tell search engines a URL has changed instead of waiting to be re-crawled. Engines that adopt the protocol agree to share submitted URLs with every other participating engine, so one ping propagates. That matters for AI visibility because assistants sit on top of these indexes — a stale index means stale answers about you.

Setup

  1. Generate a key: 8 to 128 characters, letters, numbers and dashes only.
  2. Host it as a UTF-8 text file at your root — example.com/{key}.txt — containing the key and nothing else. This proves ownership.
  3. Ping on publish or update.
submit
# one URL
curl "https://api.indexnow.org/indexnow?url=https://example.com/page&key=YOUR_KEY"

# many URLs — up to 10,000 per request
curl -X POST https://api.indexnow.org/indexnow \
  -H "Content-Type: application/json" \
  -d '{
    "host": "example.com",
    "key": "YOUR_KEY",
    "urlList": [
      "https://example.com/llms.txt",
      "https://example.com/about"
    ]
  }'

A 200 confirms receipt — not indexing. Submit only URLs that genuinely changed; pinging unchanged pages wastes your quota and earns nothing.

Source: IndexNow documentation

Fundamentals

Identity hygiene

Unglamorous, free, and worth more than any of the above if you have not done it.

Pick one canonical domain

www or bare, HTTP or HTTPS — choose one and 301 everything else to it. A site reachable at four addresses can be read as four weakly related entities.

Use one name, everywhere

The string in your llms.txt, your JSON-LD, your LinkedIn and your invoices should match. Entity resolution is largely string matching; every variant dilutes it. This is what brand.txt is for.

Link your profiles both ways

sameAs in your markup pointing out, and your profiles pointing back. A reciprocal link is verifiable; a one-way claim is an assertion.

Say what you are not

Markets you left, services you never offered. Absence of a boundary is not read as a boundary — it is filled by inference.

None of this is part of the AI Discovery Files specifications, which live in the project repository . It is collected here because it comes up constantly once the files are published. Each item links to its primary source — check there before making a decision that matters, since these features change without notice.