A few months ago we wrote that AI search is changing how renters find apartments. More and more people open ChatGPT, Claude or Perplexity, describe the place they want and get back a short list instead of ten blue links. That post made the case that the shift is real and that it rewards properties whose data a model can actually read.
So how do I get on that list? That is the practical question, and what follows is the checklist. None of it needs a data-science team, and most of it is work you do once.
Traditional SEO optimizes for ranking, which means getting your page near the top of a list of links. Generative engines work differently. When someone asks an assistant for ‘a two-bedroom under $2,400 near downtown with in-unit laundry, available in September,’ the model is not returning a list of pages. It is assembling an answer, and to do that it needs facts it can lift: the rent, the bed and bath count, the neighborhood, the amenity, the availability date. Facts that live on your page as plain, structured text make you quotable. Bury them in a picture, a PDF or a third-party widget the model cannot open and you are invisible, however beautiful the page looks to a human. GEO, for Generative Engine Optimization, is the usual name for the work of fixing that.
Nobody can promise a spot in an AI’s answer, the same way nobody can promise the top of Google. You can remove every reason a model has to skip you and pick a competitor whose data is easier to read. That is what this playbook is for.
Structured data
Structured data is a small, invisible block of code (the format is JSON-LD, using the Schema.org vocabulary) that states the facts of your page in a way machines read directly. Do this one first, because it removes the guesswork. Instead of hoping a model infers your rent from marketing copy, you hand it the number.
For an apartment community, the relevant vocabulary is an ApartmentComplex that carries the address, a geo location and an amenityFeature list, and contains one Accommodation (or Apartment) entry per floor plan, each with a numberOfBedrooms and numberOfBathroomsTotal, a floorSize and an Offer holding the price. Where a plan’s units are not all priced the same, that becomes an AggregateOffer with a low and a high price. Google has read Schema.org markup for years to build its rich results, and the same blocks are what an assistant reads when it wants a number it can quote.
ApartmentComplex: ‘Halstead Row’
→ geo: 40.71, −74.01
→ amenityFeature: in-unit laundry, rooftop, parking
→ numberOfAvailableAccommodationUnits: 12
→ Apartment: ‘The Birch’ · 2 bed · 2 bath · 1,100 sq ft
→ AggregateOffer: $2,380–$2,595 / month · 3 priced units
Every property and floor plan on a WP FloorMap site emits this JSON-LD automatically. The priced units on a plan aggregate into its price range and an in-stock or out-of-stock flag, while the property’s available-unit count sits on the complex itself. It is generated from the same Engrain SightMap® and PMS data that powers the page, supplemented by any data additions you make within WP FloorMap. When a pet policy changes, a unit leases or a price changes, the structured data changes with it on the next refresh.
The words on the page
The most common gap is subtler than it looks. The facts are right there on the page, but only in a form a machine cannot read: pricing baked into a JPEG, a floor plan shared as a PDF, a spec sheet saved as an image. To a person these look perfectly fine. But a crawler, whether Google’s or an AI’s, generally cannot read the text inside an image or reliably parse a PDF floor plan. So whatever a renter sees on the page, make sure the same facts also exist as plain text, where a machine can read them as easily as a person can.
The fix is to render the facts—plan names, bed and bath counts, square footage, price, availability—as real HTML on your own page, next to whatever interactive map or gallery you keep for the people reading it.
Then write text shaped like an answer. Assistants are conversational, so the content that gets quoted is the content that reads like a reply to a question someone actually asked. ‘Is it pet-friendly?’ ‘What is included in the rent?’ ‘How far is it from the train?’ ‘What is available for a September move-in?’ Answer those in plain language and a model can lift the answer directly. A frequently-asked-questions section is the most efficient way to do it. Wrap that section in FAQPage structured data and every question and answer becomes machine-readable too.
On a WP FloorMap site the floor-plan cards are rendered on the server, so the plan name arrives as a heading with the bed and bath counts, the area, the price and the availability beside it as text, readable without running a line of JavaScript. The plugin also builds accessible FAQ and content sections you can drop onto any page, and the FAQ block emits its own FAQPage markup wherever you place it, which is where a question like the distance to the station belongs. Your SightMap stays exactly where it is for the visual, interactive experience.
robots.txt and llms.txt
Two small files tell AI systems how to treat your site. The first is your robots.txt, which should not block the crawlers you actually want. Plenty of sites, often without realizing it, disallow the very agents that feed AI answers. The user-agents behind today’s assistants include GPTBot and OAI-SearchBot (OpenAI), ClaudeBot (Anthropic) and PerplexityBot (Perplexity), among others. Some operators block them deliberately, which is a legitimate business decision. If you want your property recommended by these assistants, though, keeping them out works against you.
The second is a newer, still-emerging convention called llms.txt. It is a plain-Markdown file at yoursite.com/llms.txt setting out what the site is and where its detail lives, in a form an assistant can read in one pass. No model is required to read it and it is not an official standard, so treat it as a low-cost bet rather than a guarantee. Publishing one costs little, and a model that ignores it does you no harm.
A WP FloorMap site generates both files for you: an llms.txt that briefs a model on each property (the address, the available units, the floor-plan count, the price and size ranges, the amenities and the monthly fees) and an llms-full.txt that adds the floor-plan and unit tables, both rebuilt from your property data through the day. The robots file is a job you do yourself, on any site. Ours names a dozen of those agents and lets them in.
Keeping the numbers current
When a page’s availability changes as the building’s does, a model has reason to trust the number it finds there. A page that has said the same thing since spring invites it to look elsewhere. Two mechanics help: a sitemap that reports an honest lastmod date for each page, and pages that do not hide their content behind slow JavaScript a crawler may never wait for.
If your rent says one thing on your website, another on a listing site and a third in an old cached page, an assistant has no reason to trust any of them and may quote the wrong one. Pick a single source of truth for your numbers and let every surface read from it. The same discipline that makes all-in pricing a compliance win—one honest number shown as text—makes your pricing legible to AI at the same time.
Your site reads pricing, availability and floor plans straight from your SightMap source of record, in real time. The price on the card a renter reads and the price in the Offer a crawler reads resolve through the same code, so the two cannot disagree.

How to tell if it is working
Three checks will tell you where you stand:
- Ask the assistants directly. Open ChatGPT, Claude or Perplexity and ask about your property, or about ‘apartments in [your neighborhood] with [your best amenity].’ See whether you come up and whether the details are right.
- Watch your logs. AI crawlers identify themselves. Search your server logs for user-agents like
GPTBot,ClaudeBotandPerplexityBotto confirm they are visiting and what they are fetching. - Watch your referrals. Assistants increasingly link their sources, so visits referred from
chatgpt.com,perplexity.aiand the like will start to appear in your analytics. The numbers are small today and worth tracking anyway.
You can do all of this without us. It takes a site whose facts are written down where a machine can find them, and kept current as the building changes. We built the kind of site where every item on this list is handled for you, because for a leasing team the distance between ‘we should do that’ and ‘it is already done’ is usually the whole story. If you want to see what that looks like on your own property data, get in touch.
Frequently asked questions
Do I need special software to be cited by AI?
No. Everything in this playbook is standard web practice: structured data, real HTML text, a clean robots.txt and llms.txt, an FAQ and a fast site. You can do all of it by hand or with your existing tools. Software like WP FloorMap simply does it for you, kept in sync with your availability and pricing in real time.
Is llms.txt an official standard?
Not yet. It is a proposed, still-emerging convention, and no AI model is required to read it. That is why we treat it as a low-cost bet: it is trivial to publish, it may help and it does no harm if a model ignores it. Structured data and real, crawlable HTML are the parts that carry the most weight today.
Which AI crawlers should I allow?
If your goal is to be recommended by AI assistants, allow the agents behind them: OpenAI’s GPTBot and OAI-SearchBot, Anthropic’s ClaudeBot and Perplexity’s PerplexityBot, among others. Whether to allow AI crawlers at all is a legitimate business decision, but blocking them and hoping to be cited works against you.
Will structured data guarantee my property gets recommended?
No, and be wary of anyone who promises otherwise. Structured data removes the guesswork and makes you eligible to be quoted accurately; it does not force a model to pick you over everyone else, any more than good SEO guarantees the top of Google. The goal is to give the best possible answer no reason to leave you out.
How is AI visibility different from regular SEO?
They overlap heavily, and the same structured data and clean HTML help both. The difference is the goal. SEO aims to rank your page in a list of links a person then clicks. AI visibility, sometimes called Generative Engine Optimization, aims to get your facts quoted inside an answer the person may never leave. Do the fundamentals well and you serve both at once.
See your property on WP FloorMap
Send a SightMap link, and we reply with a working preview of your site within 12 hours.

by Graham Dyer 