Vehicle schema gives your inventory an explicit set of facts: which car, what price, how many kilometres, whether it is available and who sells it. Put those facts in the page shoppers can read, then describe the same facts in JSON-LD. That gives search engines and other tools a consistent record to work with.
For a dealership, the useful test is simple: does the vehicle on the screen agree with the vehicle in the code? Here is the specification to send your website provider, plus an example you can inspect.
Match the markup to the questions a shopper asks
Schema.org Vehicle describes the car. An Offer describes its sale, and AutoDealer identifies the seller. JSON-LD is a way to express those relationships in a data block inside the page.
| Buyer question | Visible page | Structured data |
|---|---|---|
| Which exact car? | Year, make, model, trim and VIN | name, brand, model, modelDate, vehicleConfiguration, vehicleIdentificationNumber |
| Does it meet the mileage limit? | 74,200 km | mileageFromOdometer: value 74200, unitCode KMT |
| What does it cost? | $17,900 CAD, with applicable fee and tax terms beside the price | offers.price: 17900; offers.priceCurrency: CAD |
| Is it still for sale? | In stock, pending or sold | offers.availability using the matching schema.org value |
| Who is selling it? | Dealership name, location and contact details | offers.seller linked to an AutoDealer entity |
| Where can I inspect it? | A stable page for this vehicle and real photographs | url, offers.url and image |
A VIN decode identifies a vehicle; it does not prove that your dealership owns it, that the odometer is current or that it is still for sale. Price, mileage and availability need to come from the dealer’s current inventory record. Leave out specifications you cannot confirm.
A vehicle-page example your provider can check
This is an illustrative listing, not a live offer. The visible page would read: “2019 Subaru Forester 2.5i. VIN JF2SKAEC0KH512345. 74,200 km. Automatic, all-wheel drive. $17,900 CAD. In stock at Example Motors in Hamilton, Ontario.” The actual price terms and contact information belong beside those facts on a real page.
{
"@context": "https://schema.org",
"@type": "Vehicle",
"name": "2019 Subaru Forester 2.5i",
"vehicleIdentificationNumber": "JF2SKAEC0KH512345",
"brand": { "@type": "Brand", "name": "Subaru" },
"model": "Forester",
"modelDate": "2019",
"vehicleConfiguration": "2.5i",
"bodyType": "SUV",
"mileageFromOdometer": {
"@type": "QuantitativeValue",
"value": 74200,
"unitCode": "KMT"
},
"driveWheelConfiguration": "https://schema.org/AllWheelDriveConfiguration",
"vehicleTransmission": "Automatic",
"fuelType": "Gasoline",
"itemCondition": "https://schema.org/UsedCondition",
"image": ["https://yourdealer.example/photos/forester-1.jpg"],
"url": "https://yourdealer.example/inventory/JF2SKAEC0KH512345",
"offers": {
"@type": "Offer",
"price": 17900,
"priceCurrency": "CAD",
"availability": "https://schema.org/InStock",
"url": "https://yourdealer.example/inventory/JF2SKAEC0KH512345",
"seller": {
"@type": "AutoDealer",
"name": "Example Motors",
"url": "https://yourdealer.example",
"address": {
"@type": "PostalAddress",
"addressLocality": "Hamilton",
"addressRegion": "ON",
"addressCountry": "CA"
}
}
}
}The example uses KMT for kilometres. Use SMI for statute miles, and put a number in the value field. A phrase such as “low mileage” cannot replace an odometer reading. Keep the page URL, offer URL and canonical URL aligned to the intended vehicle page.
What changed with Google Vehicle Listing rich results?
Google retired its dedicated Vehicle Listing structured-data search feature in 2025 and removed the related Rich Results Test and Search Console reporting. The old screenshots and setup articles still circulate. They are not a current promise of a special vehicle result. Read Google’s retirement announcement.
Vehicle and Offer remain schema.org vocabulary. Use them to describe your inventory consistently. Google’s current AI-search guidance does not require special AI markup. A valid data block is one part of a useful, accessible listing; it does not by itself establish indexing or a citation.
Use the right check for each job
| Check | Use it to establish | Next step |
|---|---|---|
| Schema.org Validator | The types and properties detected in the page or code | Resolve syntax and vocabulary issues, then compare values with the visible listing. |
| Google Rich Results Test | Eligibility for Google’s currently supported structured-data features | A missing Vehicle Listing result is expected after retirement; inspect the relevant supported types. |
| Search Console URL Inspection | Google’s crawl, index and canonical information for the URL | Check the actual page and whether its important content is accessible. |
| Saved AI answer | Whether that observation cited the exact vehicle URL | Open the cited source and check VIN, price and availability. |
Start with the Schema.org Validator. Ask your provider to show both the page’s initial HTML and the rendered page. Google can process JavaScript, while other fetchers have different capabilities; supplying the important facts in the initial response makes them available without waiting for a browser to build them. See the inventory readability checklist.
Keep the data correct when the inventory changes
- Price change: update the visible price and Offer from the same inventory record.
- Vehicle sold: stop describing it as in stock. Show the status on the page and update availability in the markup.
- Dealer identity: use the same seller name, address and website across listings.
- Freshness: report when the underlying information changed, rather than printing a new date on unchanged data.
VIN Index builds the listing and its Vehicle, Offer and dealer information from your authorized feed, with the core content in server-rendered HTML. See the VIN-level discovery checklist for the full path from feed to public page to citation, or check what your current website publishes.