Skip to content
GET-GEO.AI
/
← All guides

// guide

How do you do GEO on your own site in practice?

Dmitry Filippov

Written by: Dmitry Filippov, Founder, GET-GEO.AI
Published: 2026-08-03 · Updated: 2026-09-22

// short answer

A half-day audit of get-geo.ai found conflicting apex and www settings, an outdated suggestion from an AI agent and incomplete text exports. We aligned the canonical URLs, sitemap and llms.txt on one host. Before publishing more content, check that crawlers can reach the right version of what is already there.

  • Doing GEO on our own site took half a day and no new pages: one primary host, a Search Console domain property and rebuilt llms-full exports.
  • Every signal pointed to the apex while the apex answered with a 308 redirect to www: a loop AI fetchers with a one-request budget never get through.
  • An AI agent's checklist said the apex A record should point to 76.76.21.21; live DNS showed 216.198.79.1, Vercel's newer infrastructure, so verify model advice against the live system.
  • A freshly submitted sitemap can show "Couldn't fetch" for a couple of days; check three things: the file opens, every loc uses the right host, robots.txt lists it.
  • llms-full now ships one file per locale for 9 languages; Devanagari takes 3 bytes per character, so the Hindi file hit 85 KB and the cap rose to 300 KB.

Starting point: a site that looks right

We apply our GEO methods to our own website. This guide records one working day: the problems we found, the changes we made and the checks that followed. Every example comes from get-geo.ai.

get-geo.ai was built "by the book" from day one: server-side rendering, 9 languages with hreflang, Schema.org JSON-LD, answer-first structure, llms.txt. What could there possibly be to fix? The audit found a problem you cannot see with your eyes.

Finding #1: the apex vs. www conflict

The site physically lived on www.get-geo.ai, while every signal — canonical, sitemap, hreflang, JSON-LD, llms.txt — pointed to get-geo.ai (the apex, the domain without a subdomain). Meanwhile, the apex answered with a 308 redirect back to www.

The result was a loop: "the canonical version is the apex" → the apex redirects to www → www says "the canonical version is the apex." A classic Google crawler survives this, though it burns crawl budget. AI fetchers often do not: many of them have a budget of one or two requests per page, and some simply never reach the content through a redirect. For GEO this is critical: a file invisible to the fetcher is a file that does not exist.

The fix: the apex was made the primary domain on the host (Vercel), with www set to a 308 redirect to the apex. One switch — and every signal became consistent: the actual address, canonical, internal links, sitemap, and llms.txt now all point to the same place.

Either the bare domain or www can be the primary address. Choose one, redirect the other to it and make sure the canonical URLs, links and sitemap agree, as crawler access depends on it.

Finding #2: an outdated tip from an AI agent

The diagnostics were run by an AI agent, and its checklist included: "verify that the apex A record points to 76.76.21.21." Checking the live DNS showed otherwise: the domain resolves to 216.198.79.1 — Vercel's newer infrastructure, which the host migrated to after the model's training cutoff.

The advice was not harmful — just stale. The model was confidently quoting the past.

Check technical advice from an AI model against the live system. In this case, a DNS query was enough to establish that the suggested address was outdated. Without verification, a plausible answer can still describe an old configuration.

Step 3: Google Search Console — the domain property

After switching the primary host, the old GSC property (a URL-prefix on https://www.get-geo.ai/) became useless: it covers only www, while the pages were moving to the apex.

The correct configuration is a domain property (get-geo.ai, no protocol, no subdomain): it covers apex, www, http, https, and all subdomains at once. It can only be verified via a DNS TXT record — with one pleasant detail: the google-site-verification token is tied to the account, not to the verification method, so a record added to DNS earlier passed verification instantly. Then — submitting the sitemap under the apex address: https://get-geo.ai/sitemap.xml.

The lesson: a freshly submitted sitemap in GSC often sits with a red "Couldn't fetch" status and zero pages. That is not an error but a placeholder until the first processing pass — it is asynchronous and can take up to a couple of days. Before panicking, check three things: the file opens at its direct URL, every <loc> inside points to the right host, and robots.txt contains a Sitemap: line. If all three hold — just wait.

Step 4: include the machine-readable files in the sitemap

Our sitemap includes more than pages. It lists llms.txt, llms-full.txt, and every language version of llms-full/{locale} — with lastmod dates and priorities.

Why: AI crawlers (GPTBot, ClaudeBot, PerplexityBot) have been observed reading sitemaps, and explicitly listing the LLM files gives them a direct route to the machine-readable version of the site — without relying on the fetcher knowing the /llms.txt convention.

List the content you want crawlers to discover and use lastmod dates that reflect actual updates.

Step 5: llms-full — full content, not a table of contents

The convention distinguishes two files: llms.txt is a table of contents with links; llms-full.txt is the full content for systems that do not follow links. Our full version initially contained only the landing page: the guides — our most citable asset — were available only page by page.

What we changed:

  • Per-locale files. The full guide texts moved into llms-full/{locale}, each file entirely in its own language. Dumping 9 languages into one file means diluting the useful density for any specific query ninefold.
  • A URL under every heading. Inside the file, each guide opens with its title and canonical URL right beneath it — so a model that lifts the text can cite the page, not the txt file itself.
  • Generate exports from the same registry as the guide pages. Publishing a guide then updates the website, sitemap and llms-full files together, avoiding manual synchronization.
  • Make the size limit visible. When a guide does not fit within the cap, append its title and link instead of silently cutting off the text.
  • A lesson from an unexpected place: the first 100 KB limit was nearly broken by a writing system. Devanagari (Hindi) takes 3 bytes per character in UTF-8 versus 1 for Latin — the Hindi file hit 85 KB while the English one was half that. We raised the limit to 300 KB. If your site is multilingual, budget with the script in mind: CJK and Indic writing systems weigh several times more.

The day's result

Half a day of work, not a single new page of content — and yet:

  • every signal on the site points to one host, with no loops or extra redirects;
  • an AI fetcher with a one-request budget gets the content on the first try;
  • GSC collects data for the whole domain, not one subdomain;
  • the full corpus of guides in 9 languages is available to machines as one file per locale;
  • publishing a new guide automatically updates the site, the sitemap, and llms-full.

Technical checks before more content

These fixes make content accessible and consistent across the site. They do not establish that a page will be cited, but they remove problems that can prevent a crawler from reading it.

Related questions

Does apex vs www matter for GEO?

The choice itself does not. What matters is that the site lives on exactly one host and every signal — canonical, sitemap, hreflang, JSON-LD, llms.txt — points there, with the other hostname hard-redirecting. A loop between apex and www burns crawl budget and often stops AI fetchers that only make one or two requests.

Should I use a domain property in Google Search Console?

Yes, if you care about both apex and www (or http and https). A domain property covers all of them at once and verifies via DNS TXT. A URL-prefix property on www alone goes blind the moment the primary host moves to the apex.

Why list llms.txt in the sitemap?

AI crawlers have been observed reading sitemaps. Listing llms.txt and the per-locale llms-full files gives them a direct route to the machine-readable corpus without relying on every fetcher knowing the /llms.txt convention.

Why per-locale llms-full files instead of one multilingual dump?

A single file with nine languages dilutes useful density ninefold for any specific query. One file per locale keeps the corpus dense, puts a canonical URL under every guide heading, and can be generated from the same registry as the HTML pages.

Related guides

Sources

  1. 01Google Search Central — domain properties in Search Console
  2. 02llmstxt.org — the llms.txt proposal
  3. 03Vercel — domains and redirects documentation

// share

LinkedInXReddit

How to cite this page

You may quote and reuse this content with attribution and a link to this page.

“How do you do GEO on your own site in practice?” — GET-GEO.AI, 2026-09-22. https://get-geo.ai/en/guides/how-we-do-geo-ourselves