Technical & Structure · 10 min read · September 25, 2026 · Hafsa Tariq, gaash.ai
The used-car page as a record: one vehicle, every fact a buyer checks
A used vehicle is one unit, so its page is the record of one car: year, make, model and trim, mileage, VIN or stock number, the price and what it includes, condition and reconditioning, warranty, the history report, certified status, captioned photos and whether it is still for sale. State every fact in text on your own domain, and change the page visibly when the car sells.
Why each used car needs a page of its own
A new [model] in one trim and color is one of many identical cars, and a page about the model can describe every one of them. A used car cannot be described that way. Its mileage, its owners, the work done on it and the scratch on the rear door belong to one vehicle, and they are what a used-car buyer's question is made of: "one-owner [model] under [n] miles near [place]", "certified [model] with factory warranty left". Only a page that describes one car can answer that.
That page has to sit on your own domain, in HTML a fetcher receives without running a script. The overview for car dealerships explains what goes wrong when an inventory is drawn by a script or served from a provider's domain; this article is about what the page says once it is there. Give each vehicle one address that stays the same while the car is for sale, whatever happens to its price, so the page an answer cites is still the page a buyer lands on.
Our audit did not measure vehicle pages. It fetched the homepage, the contact page and the about page of each of 9,483 small business websites (40 trades including car dealerships, 90 metros, late August to early September 2026), and on those pages 3.0% of the sites rendered their content only in JavaScript. There is no dealership cut, and no figure for the inventory pages behind the homepage.
What the record states, field by field
Write each fact as a line of text a reader can lift without the gallery around it. Brackets mark your own values, and the last column is the buyer's question each line answers.
| Fact | Written on the page like this | The question it answers |
|---|---|---|
| Year, make, model, trim | "[year] [make] [model] [trim], [body style], [drivetrain], [engine or battery]" | Is it the version I want? |
| Mileage | "[n] miles on the odometer, read on [date]", or kilometers where your buyers use them | How far has it been driven? |
| VIN and stock number | "VIN [full VIN]. Stock number [number]." | Is this the car in the ad, and can I look up its past? |
| Price and fees | "[price] [currency]. Includes [what the price includes]. Added at signing: [what is not included]." | What will I pay in total? |
| Condition and reconditioning | "Inspected [date]. Replaced: [parts]. Known damage: [none, or what and where]." | What shape is it in, and what was fixed? |
| Warranty | "Manufacturer's warranty remaining: [time or distance], on the maker's terms. Dealer warranty offered: [name and term]." | Who covers it, and for how long? |
| History report | "A vehicle history report is available [on this page, or on request]." | Can I see where it has been? |
| Certified status | "Certified under the [program name] program on [date]", linked to your certified program page | Is it certified, and what does that include? |
| Photos | A caption in text under each photo: "[what it shows], [where on the car]" | Does it look like the description? |
| Availability | "Available as of [date]", "On hold until [date]" or "Sold on [date]" | Is it still there? |
The price and availability rows need more than a line, and get sections of their own below. Every other row is one sentence, written on every page even when it feels obvious. A buyer asking for a hybrid under [n] miles with warranty left has three conditions, and a page that states two of them has not answered.
The price line: one price, and what it includes
The price is the fact a buyer carries to the desk, so the page states it once, with what it includes and what it leaves out. Say whether the listed price includes [the fees you charge] and which costs are added at signing ([tax, registration, the documentation fee, any other charge]), and use the same wording on every vehicle page. A monthly payment is a credit term, not a price; if the page shows one, the terms it assumes ([term], [rate], [down payment]) sit beside it.
The rules on advertised prices, dealer fees and credit terms differ by jurisdiction, and they are not this page's to state. Your compliance officer or counsel approves the wording of the price line once, as a template, and every vehicle page uses the approved version. Put the date the price was set beside it, and change the markup on the same day as the page. Google's introduction to structured data says not to mark up information a visitor cannot see, so a price left in the markup after the page has changed is a stale second copy.
Condition, warranty and history, written as facts rather than adjectives
"Immaculate" and "runs great" are words a buyer cannot check. "New front brake pads and rotors, [month]; two new tires, [month]; paint touched up on the rear bumper" answers the question the buyer brings to the test drive. State known damage in words, repaired or not. schema.org's vehicle vocabulary has a property for it, knownVehicleDamages, a text field for damage the seller knows of, whether or not it has been repaired.
Warranty is coverage someone else defines. Say what remains of the manufacturer's warranty on its own terms, as a time and a distance, and link the maker's page for what it covers. If you offer a dealer warranty or a service contract, give its name, how long it runs and where its terms are written. Whether a warranty passes to the next owner depends on the maker's terms and the rules where you sell, which the page links to rather than restates.
The history report line is one sentence: whether a report is available and how the buyer gets it. The certified line says this car is certified, under which program and since when, and links to the program page, which says once what certification includes. Photos reach a fetcher as file addresses plus the words beside them, so give each a caption in text (what it shows, where on the car) and alt text for a reader who cannot see it. If a photo is the maker's image of the model rather than this car, the caption says so.
When the car sells, the page says so
Change a sold car's page on the day of the sale, where a reader can see it. Keep the address live. Put "Sold on [date]" in the first line and in the page title, leave the car's facts below it, and link three or four similar vehicles that are in stock: the same model, the same condition, a similar mileage. In the markup, set the Offer's availability to SoldOut, schema.org's value for an item that has sold. A car held with a deposit is Reserved, its value for an item held for someone and not available, with "On hold until [date]" in the text.
What the page must not do is change silently. A vehicle page that shows a different car at the same address, redirects to the homepage, or goes on saying available tells the next reader something false, and an answer written from it repeats the error; that stale answer is what the dealership self-check is built to catch. Google's general structured data guidelines ask for up-to-date information, which on a sold car's page means SoldOut rather than InStock. The plain notice also gives a buyer arriving from an old answer somewhere to go.
When the notice has done its work, on a date you set, remove the page and send its address to the search results page for the same model with a 301 redirect; Google's redirect documentation describes how a permanent redirect is treated. Make each change in every copy of the record on the same day: the page, its markup, and the feed that carries your inventory to listing sites and anywhere else it goes.
The search results page lists; the vehicle page states
The page that lists your inventory is an index, not a record. Each car in it needs its year, make, model, trim, mileage and price in text, and a plain link to its own page. A list that loads more cars as someone scrolls, or is built by a script after the page arrives, can reach a fetcher as its first screen or as nothing, because usually no scripts run: Google renders JavaScript as a separate, deferred step, and the assistants' crawler documentation promises no rendering at all. Use page links that work without a script, as Google's page on crawlable links describes.
Lists filtered by model or body style are useful pages when they list real cars. Lists that differ only by the name of a town are not: Google's spam policies treat pages targeted at specific regions or cities that funnel users to one page as doorway abuse. Keep the vehicle markup on each car's own page, where its facts are, and let the list link to it.
Markup for one used car: a Car with an Offer
On schema.org, Car is a kind of Vehicle, and Vehicle is a kind of Product. A used car's JSON-LD therefore takes vehicle properties (the VIN, the mileage, the trim, known damage) and product properties (the brand, the model, the condition, the stock number as sku) in one node, with an Offer carrying the price, the currency and the availability. We checked each property in this template on schema.org before using it, and every value in it comes from the visible page.
{
"@context": "https://schema.org",
"@type": "Car",
"@id": "https://www.example.com/used/[stock-number]#vehicle",
"name": "[year] [make] [model] [trim]",
"url": "https://www.example.com/used/[stock-number]",
"description": "[the page's first paragraph, as written there]",
"brand": { "@type": "Brand", "name": "[make]" },
"model": "[model]",
"vehicleConfiguration": "[trim]",
"vehicleModelDate": "[model year]",
"vehicleIdentificationNumber": "[VIN]",
"sku": "[stock number]",
"mileageFromOdometer": {
"@type": "QuantitativeValue",
"value": "[mileage, as a number]",
"unitCode": "SMI"
},
"itemCondition": "https://schema.org/UsedCondition",
"color": "[exterior color]",
"vehicleInteriorColor": "[interior color]",
"knownVehicleDamages": "[as the condition line states it, or none]",
"image": [
"https://www.example.com/used/[stock-number]/front.jpg",
"https://www.example.com/used/[stock-number]/rear-door.jpg"
],
"offers": {
"@type": "Offer",
"price": "[price, as a number]",
"priceCurrency": "[currency code: USD, CAD, EUR or AED]",
"availability": "https://schema.org/InStock",
"seller": { "@id": "https://www.example.com/#dealer" }
}
}The mileage is a QuantitativeValue with a unit code, SMI for miles or KMT for kilometers. The condition is UsedCondition; certification belongs in the page text and on the program page, not in the condition value. The seller points at the dealership's own AutoDealer node by its @id, the node built in the article on dealer service pages, so the car and the rooftop that sells it sit in one graph of structured data.
Google has no vehicle result for this markup to earn. Its list of the structured data features Search supports has no vehicle entry, and its record of documentation changes shows the vehicle listing documentation removed in September 2025 because those results are no longer shown in Search. Its page on AI features asks for no special schema.org data, and lists structured data that matches the visible text, and up-to-date Merchant Center information, among its best practices. The markup is there so that any parser reads the same record the page states, which is why it changes whenever the page does.
Common questions
The price changes every few days. What has to change with it?
The price line on the page, the date beside it, the Offer's price in the markup, and every feed that carries the car, all on the same day. The address stays the same. A change that reaches the page and misses the feed leaves two prices in public for one car, and an answer can quote either of them.
Do certified cars need pages of their own?
No. One car, one page, one address. Certification is a fact on that car's page, with the program's name, the date and a link to the certified program page, which says once what the program includes. A second page for the same car under a certified heading makes two records of one vehicle, and sooner or later they disagree.
Our photos come from the inventory provider's app. What do we add?
Words. The photos arrive as files, and a fetcher receives their addresses and whatever text sits beside them. Add a caption under each saying what it shows, alt text for a reader who cannot see it, and a line in the condition section for any damage a photo shows. If the gallery has no caption field, put the captions in the page text below it.
Should a sold car stay in the search results list?
No. The list is for what a buyer can buy today, so take a sold car out of it on the day of the sale. Its own page keeps the sold notice and the links to similar cars, so a buyer arriving from an old answer or an old link still finds something true. Only the list and the feed drop it.
Sources
The rendering figure is this site's own, from an audit of homepages, contact pages and about pages across 40 trades; it measured no vehicle pages. The Car, Vehicle, Offer and availability definitions were read on schema.org on the day of writing; the removal of Google's vehicle listing documentation is recorded on Google's own page of Search Central documentation updates.
Sources: our audit of 9,483 small-business sites, with its method · schema.org, Product · schema.org, Offer · Google, introduction to structured data · Google, general structured data guidelines · Google, structured data gallery · Google, AI features and your website · Google, redirects · Google, JavaScript SEO basics · Google, crawlable links · Google, spam policies · Google Search Central, documentation updates
Read on