Hard Coded Real Estate logoHard Coded Real Estate
Back to blog

Strategy · 10 min read

What Is GEO (Generative Engine Optimization) for Real Estate?

GEO makes your site legible to AI answer engines. Here is the exact machine-readable layer we shipped, the Content-Signal matrix, and the CDN trap.

GEO in One Sentence

Generative engine optimization (GEO) is the practice of making a website retrievable, quotable, and correctly attributed by AI answer systems, so that when someone asks an assistant a question your organization should own, your page is the source it grounds on and the link it cites.

Classic SEO competes for a rank in a list of blue links. GEO competes for a sentence inside a generated answer, plus the citation underneath it. Those are different games played on the same field.

GEO does not replace SEO

This is the part vendors get wrong when they sell GEO as a new discipline that makes the old one obsolete. Answer engines are not conjuring facts out of nothing. They are running searches, fetching pages, and reading what they find.

That means a site failing classic hygiene has nothing to offer a generative engine. If your pages are slow, blocked, thin, duplicated across an apex and a www host, missing canonical tags, or absent from a sitemap, no amount of AI-specific tooling rescues you. The floor is still the floor.

The honest framing: GEO is a thin, cheap layer that sits on top of correct SEO. It is worth building because almost nobody in real estate has built it yet, not because it replaces the work underneath. Start with Core Web Vitals and accessible, well-structured markup. Then add this layer.

How an AI Answer Actually Gets Assembled

Four steps, and each one is a place you can win or lose.

  1. Crawling. A bot fetches your pages and stores them. Different bots do different jobs, and the same vendor may run several. One indexes for search, one fetches live pages when a user asks a question, one collects training data.
  2. Retrieval. When a user asks something, the system searches an index or the live web and pulls back a handful of candidate documents. This is where most of the competition happens, and it looks a lot like ordinary search.
  3. Grounding. The retrieved text is fed into the model as context for this specific answer. Your words are being read at answer time, not recalled from memory.
  4. Citation. The system decides which sources to name and link. Clean canonical URLs, clear page titles, and unambiguous claims all raise the odds that the link points where you want.

Retrievable and trainable are two different things

Most people collapse these, and it leads to bad decisions.

Retrievable means a crawler may fetch your page now and a system may use it as context for an answer it is generating right now. That is what produces citations and referral traffic.

Trainable means your content may be absorbed into model weights during training. That produces no citation, no link, and no traffic. It is a licensing question, not a marketing one.

Once you separate them, the policy decision becomes easy. You want maximum retrieval and you can reserve training rights, and those two positions do not conflict.

The Machine-Readable Layer, File by File

Here is the layer as actually shipped on this site. Every file below is live and you can fetch it yourself.

FilePurposeRead by
/robots.txtCrawl permissions per bot, plus the Content-Signal usage policy and pointers to every other discovery fileSearch crawlers, AI crawlers, browsing agents
/sitemap.xmlComplete list of canonical URLs with lastmod and priority, including the discovery files themselvesSearch engines, retrieval indexes
/llms.txtShort, curated map of the site written for language models: what the company does, primary pages, solutions, policiesAssistants and agents that support the convention
/llms-full.txtExpanded context: positioning, audience, full page inventory, citation rules, agent boundariesAssistants needing deeper grounding
/ai.txtPlain-language AI usage policy: what may be indexed, summarized, cited, and what is off limitsAI vendors, compliance reviewers, agents
/mcp.json and /.well-known/mcp.jsonMachine-readable statement of agent action surface, published as false with an explicit restricted-actions listMCP clients, autonomous agents
/security.txt and /.well-known/security.txtVulnerability disclosure contact, policy link, canonical URL, expiryResearchers, automated scanners
/sub-processorsNamed third-party providers by category, as a real page rather than a buried PDFProcurement, legal reviewers, AI answers about vendor risk

Three details in that table are worth arguing for specifically.

Both /mcp.json and /.well-known/mcp.json exist. Agents look in different places, so the file is served from both. Publishing "published": false with an explicit list of restricted actions is not an empty gesture. It tells an agent, in a form it can parse, that there is no write surface here and that it should not attempt logins, form submissions, or payment flows.

ai.txt contains a precedence clause. It states that where sources appear to conflict, the most restrictive reading applies. Any organization publishing four or five overlapping policy files needs that line, because the files will drift and a crawler needs a deterministic tie-breaker.

Sub-processors are a page, not a file. Associations and brokerages are asked vendor-risk questions constantly, by boards, by counsel, and now by assistants answering on behalf of a buyer. Publishing named sub-processors and a security posture as crawlable HTML means the answer engine can find the real answer instead of inventing one.

The Content-Signal Matrix

Content Signals extend robots.txt with a usage policy rather than a crawl permission. Crawling permission answers "may you fetch this." Content Signals answer "what may you do with it once you have."

SignalWhat it governsThis siteEffect of setting it to no
searchAppearing in search results and answer results, with links and short excerptsyesYou disappear from results and from the citation list
ai-inputUse of the page as retrieval context to ground a generated answeryesYour page is not used as source material for AI answers
ai-trainUse of the content to train or fine-tune a modelnoNothing changes about your visibility. It reserves a licensing right
useThe permitted mode of use overallreferenceSignals that the content is for reference and citation, not reuse

The live line reads:

Content-Signal: search=yes, ai-input=yes, ai-train=no, use=reference

The insight most people get backwards

Blocking model training costs you nothing in AI-answer visibility.

Site owners hear "block AI" and assume they are choosing between protecting their content and being cited. They are not, because the signals are separate. ai-train governs training rights. search and ai-input govern whether you show up in and ground AI answers. Setting ai-train=no while keeping search=yes and ai-input=yes is full visibility with training rights reserved.

That is exactly this site's posture, and it is the posture we recommend to associations and brokerages holding member content, education libraries, and market commentary they had to pay to produce.

The ai-train=no value is written as an express reservation of rights under Article 4 of EU Directive 2019/790, the copyright directive that permits text and data mining unless the rightsholder has expressly reserved the right in an appropriate manner, with machine-readable means named as the expected mechanism. A robots.txt directive is about as machine-readable as it gets. Whether any given AI vendor honors it is a separate question, and the answer today is uneven. Stating the reservation clearly costs one line and puts you in a materially better position than staying silent.

The Trap That Quietly Voids All of This

Here is the most useful thing in this post, and it is the thing we learned the hard way on this site.

Your CDN can serve its own robots.txt.

Several edge providers now ship a managed robots.txt feature that injects a policy block, including their own Content-Signal line, into the file served to the public. It is a well-intentioned feature. It is also invisible from your repository, because the edge answers the request before your origin ever sees it. You deploy a carefully reasoned policy, the deploy succeeds, the file in git is perfect, and crawlers receive something else.

We shipped search=yes, ai-input=yes, ai-train=no, use=reference. What went out to the edge was not only that.

How to detect it

  • Diff the live file against your repository file. Not eyeball it. Diff it. This is the only check that catches everything.
  • Look for a managed-content marker. Injected blocks are usually wrapped in comments such as BEGIN Managed content and END Managed content. If that marker appears in a file you never wrote it into, the edge is editing your output.
  • Count your Content-Signal lines. There should be exactly one. Two means a second policy is being appended, and you now have an ambiguous document that crawlers will resolve however they like, probably not the way you intended.
  • Check the apex and the www host separately. Redirect behavior and edge rules are configured per hostname and can differ.

The rule to remember

The edge always wins over the origin. Whatever your CDN, WAF, worker, or proxy decides to serve is the file the internet sees, and your repository has no vote. This applies to robots.txt, security headers, and any static file the platform considers "managed."

Fix it in the edge dashboard by turning the managed feature off, then verify from outside your network. Do not verify from a browser tab that may be reading a cached copy.

Structured Data That Matters for Real Estate

Machine-readable files tell engines about your site. Structured data tells them about your content. Six types carry most of the weight.

  • Organization. Legal name, canonical URL, logo, contact points, and sameAs profiles. This is how an engine knows the entity it is describing is you and not a similarly named brokerage two states over.
  • WebSite. Site name and canonical host, which also disambiguates apex versus www.
  • BlogPosting. Headline, description, publish and modified dates, author, publisher, and image. Answer engines lean on dates when a question is time-sensitive, and undated content loses to dated content.
  • FAQPage. Question and answer pairs in a form that can be lifted directly into an answer. This is the single most valuable schema type for GEO because the shape of the data matches the shape of the output.
  • BreadcrumbList. Positional context that helps a system understand whether a page is a hub or a leaf.
  • Service or Product. For each real offering, so that questions like "who builds MLS-connected search for associations" can resolve to your IDX page rather than to a generic directory listing.

Write the schema to match what is visibly on the page. Marking up claims that a human reader cannot see on that page is how you lose eligibility across every engine at once.

Verify It From a Terminal

Publishing is not proof. Run this from the root of your repository and read the output.

SITE="https://www.hardcodedrealestate.com"

FILES="
/robots.txt
/sitemap.xml
/llms.txt
/llms-full.txt
/ai.txt
/mcp.txt
/mcp.json
/.well-known/mcp.json
/security.txt
/.well-known/security.txt
"

for f in $FILES; do
  code=$(curl -s -o /dev/null -w "%{http_code}" "$SITE$f")
  echo "$code  $f"
done

# Does the live robots.txt match the file in your repo?
curl -s "$SITE/robots.txt" > /tmp/robots.live.txt
diff public/robots.txt /tmp/robots.live.txt && echo "OK: live robots.txt matches origin"

# Did anything at the edge inject a managed block?
curl -s "$SITE/robots.txt" | grep -i "managed content" && echo "WARNING: edge-injected content"

# There should be exactly one policy line.
echo "Content-Signal lines: $(curl -s "$SITE/robots.txt" | grep -c '^Content-Signal:')"

Every file should return 200. The diff should be empty. The managed-content grep should find nothing. The Content-Signal count should be 1.

Put this in CI or a monthly reminder. Edge configuration changes without a deploy, which means this check can go from green to red while nobody touches the codebase.

What GEO Does Not Do

Four honest limits, because the field is full of people promising outcomes nobody can promise.

It does not guarantee citation. No file, header, or schema obligates an answer engine to name you. These signals make you eligible and legible. Selection is not yours to control.

It does not replace good content. A pristine llms.txt pointing at twelve pages of vague marketing copy produces nothing. Retrieval systems reward specific, verifiable, well-organized answers, which is the same thing careful human readers reward.

Published is not indexed. A file that returns 200 has been published. Whether any crawler has fetched it, whether a vendor supports the convention, and whether it influenced a single answer are separate questions with separate evidence. Do not report shipping as a result.

Adoption is uneven and moving. Content Signals, llms.txt, and MCP discovery are emerging conventions, not settled standards. Some vendors honor them, some ignore them, and the list changes. The reason to ship anyway is that the whole layer costs an afternoon, aligns with published standards, and puts you ahead of a field that has mostly shipped none of it.

Where to Start

If you run an association or brokerage site, the order that works is: fix classic hygiene first, then publish the machine-readable layer, then add structured data, then verify from outside your network on a schedule.

If you would rather see where your current site stands before touching anything, the real estate website audit covers crawlability, performance, accessibility, and this discovery layer together. If you want the layer built into the platform rather than bolted on afterward, that is what our websites and portals work and governed AI agents are for. Our own AI policy and full policy hub are public, crawlable, and say exactly what this post says, which is the point.

Frequently Asked Questions

What is GEO (generative engine optimization)?
GEO is the practice of making a website retrievable, quotable, and correctly attributed by AI answer systems such as ChatGPT, Claude, Perplexity, Copilot, and Google AI Overviews. Classic SEO competes for a position in a ranked list of links. GEO competes to be the source an assistant grounds its written answer on, and to be the link it cites underneath.
Does GEO replace SEO for real estate websites?
No. GEO sits on top of SEO and depends on it completely. Answer engines mostly retrieve from pages that are already crawlable, fast, correctly structured, and indexed, so a site that fails classic hygiene has nothing for a generative engine to retrieve.
Does blocking AI training hurt my visibility in AI answers?
No, because training and retrieval are governed by different signals. The ai-train signal controls whether your content may be used to train a model, while search and ai-input control whether you appear in results and whether your page may ground a generated answer. You can set ai-train=no and still keep full AI answer visibility with search=yes and ai-input=yes.
What is llms.txt and does anyone actually read it?
llms.txt is a plain-text map of your most important pages, written for language models rather than browsers, usually paired with an expanded llms-full.txt. Adoption by AI vendors is still uneven and no engine guarantees it will read the file. It costs an afternoon to write, it is easy to keep accurate, and it gives any agent that does fetch it a clean, canonical view of your site instead of a guess.
Why would a CDN break my robots.txt?
Some edge networks offer a managed robots.txt feature that injects or appends their own policy block, including their own Content-Signal line, to the file they serve. Because the edge answers the request before your origin does, visitors and crawlers can receive a policy you never wrote. Always diff the live file against the one in your repository rather than trusting the deploy.

Want this applied to your platform?

Hard Coded Real Estate builds modern unified platforms for real estate associations, brokerages, and professional teams.

Talk to the team