Accommodation
Accommodation is the parent type for any space that can house people: houses, apartments, hotel rooms, suites, camping pitches, meeting rooms. With 17 direct properties, it covers everything real estate sites, vacation rental platforms, and hotel chains need: floor size, room counts, bedroom and bathroom breakdowns, bed configurations, occupancy limits, lease terms, year built, amenity lists. Many properties are still in schema.org's pending area, but the core set (floorSize, numberOfRooms, occupancy, amenityFeature, petsAllowed, bed, permittedUsage) is stable.
The type hierarchy is Thing → Place → Accommodation. Subtypes split by use: House, Apartment, SingleFamilyResidence for residential real estate; HotelRoom and Suite for hospitality; Room for individual rooms; CampingPitch for outdoor accommodation. Use the most specific subtype that fits.
Full example of schema.org/Accommodation json-ld markup
The markup is verified as valid with Rich Results Test from Google.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@id": "https://copenhagenrentals.dk/listings/blegdamsvej-12-2tv#accommodation",
"@type": "Accommodation",
"name": "Bright 3-Bedroom Apartment Near Rigshospitalet",
"description": "Renovated 1925 apartment in central Copenhagen, walking distance to Rigshospitalet and the Royal Institute of Medicine. Three bedrooms, hardwood floors, original moldings, modern kitchen.",
"url": "https://copenhagenrentals.dk/listings/blegdamsvej-12-2tv",
"image": [
"https://copenhagenrentals.dk/listings/blegdamsvej-12-2tv/photo-1x1.jpg",
"https://copenhagenrentals.dk/listings/blegdamsvej-12-2tv/photo-4x3.jpg",
"https://copenhagenrentals.dk/listings/blegdamsvej-12-2tv/photo-16x9.jpg"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "Blegdamsvej 12, 2.tv",
"addressLocality": "Copenhagen",
"postalCode": "2200",
"addressCountry": "DK"
},
"geo": { "@type": "GeoCoordinates", "latitude": 55.6970, "longitude": 12.5680 },
"floorSize": { "@type": "QuantitativeValue", "value": "98", "unitCode": "MTK" },
"numberOfRooms": 4,
"numberOfBedrooms": 3,
"numberOfBathroomsTotal": 2,
"numberOfFullBathrooms": 1,
"numberOfPartialBathrooms": 1,
"occupancy": { "@type": "QuantitativeValue", "value": 6 },
"bed": [
{ "@type": "BedDetails", "numberOfBeds": 1, "typeOfBed": "King" },
{ "@type": "BedDetails", "numberOfBeds": 2, "typeOfBed": "Twin" },
{ "@type": "BedDetails", "numberOfBeds": 1, "typeOfBed": "Queen" }
],
"petsAllowed": true,
"yearBuilt": 1925,
"floorLevel": "2nd floor",
"leaseLength": { "@type": "QuantitativeValue", "minValue": 6, "unitCode": "MON" },
"amenityFeature": [
{ "@type": "LocationFeatureSpecification", "name": "WiFi", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Dishwasher", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Washer/Dryer", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Elevator", "value": true },
{ "@type": "LocationFeatureSpecification", "name": "Bicycle storage", "value": true }
],
"permittedUsage": "Long-term residential rental",
"tourBookingPage": "https://copenhagenrentals.dk/listings/blegdamsvej-12-2tv/tour"
}
</script>Stable vs pending properties
The properties Google reads most reliably are stable: floorSize, numberOfRooms, occupancy, amenityFeature, petsAllowed, permittedUsage, bed. The pending ones (numberOfBedrooms, numberOfBathroomsTotal, numberOfFullBathrooms, numberOfPartialBathrooms, floorLevel, yearBuilt, accommodationFloorPlan, leaseLength, tourBookingPage, accommodationCategory) are valid markup but not finalized. Include them when relevant; expect their behavior to evolve.
floorSize and numberOfRooms
floorSize takes a QuantitativeValue with value and unitCode: "MTK" for square meters, "FTK" for square feet. numberOfRooms takes a number or QuantitativeValue. "Number of rooms" is the total room count (including bathrooms and kitchen in many regions), distinct from numberOfBedrooms (sleeping rooms only). Real estate listings should include both since users search by both.
bed configuration
bed accepts a Text label ("King", "Two Queens"), a BedType enum value (note: schema.org has not published BedType members, so use Text in practice), or a BedDetails object with numberOfBeds and typeOfBed. For complex configurations like "1 king + 2 twins", use BedDetails arrays.
amenityFeature
amenityFeature takes LocationFeatureSpecification objects, each with name and value (Boolean). This is how you express WiFi, parking, pool, AC, dishwasher, washer/dryer. Vacation rental platforms (Airbnb, Vrbo) read this for filters. The Boolean lets you express both presence (true) and absence (false).
Minimal valid version
The smallest markup that still produces a valid Accommodation entity. Use it as the floor. Reach for the advanced example above when you want search engines and AI agents to understand more about your content.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Accommodation",
"name": "Bright 3-Bedroom Apartment Near Rigshospitalet",
"address": { "@type": "PostalAddress", "streetAddress": "Blegdamsvej 12, 2.tv", "addressLocality": "Copenhagen", "addressCountry": "DK" },
"floorSize": { "@type": "QuantitativeValue", "value": "98", "unitCode": "MTK" },
"numberOfRooms": 4,
"occupancy": { "@type": "QuantitativeValue", "value": 6 },
"image": "https://copenhagenrentals.dk/listings/blegdamsvej-12-2tv/photo-16x9.jpg",
"description": "Renovated 1925 apartment in central Copenhagen, three bedrooms."
}
</script>Google rich results this unlocks
Markup matching this example makes your page eligible for the following Google Search rich results. The primary target drives the required / recommended property classification in the advanced code block above.
- Google docsVacation rental and accommodation listingsprimary
Common Accommodation mistakes
Mistakes that pass validation but silently fail to earn rich results or mislead consumers walking the graph. Avoid these and your markup will be ahead of most sites in the wild.
- 01
floorSize as a plain number
Wrong"floorSize": 98Right"floorSize": { "@type": "QuantitativeValue", "value": "98", "unitCode": "MTK" }floorSize takes a QuantitativeValue with explicit units. A bare number has no unit. Use MTK for square meters, FTK for square feet. Without the unit, an apartment listed as "98" could be 98 m² (1,055 sq ft) or 98 sq ft (9 m²), a 10x error.
- 02
Confusing numberOfRooms with numberOfBedrooms
Wrong"numberOfRooms": 3 for a 3-bedroom apartmentRight"numberOfRooms": 4 (3 bedrooms + 1 living room) and "numberOfBedrooms": 3numberOfRooms is total rooms; numberOfBedrooms is sleeping rooms. A 3-bedroom apartment typically has at least 4 rooms. Real estate searches use both, so include both.
- 03
Inventing BedType enum values
Wrong"typeOfBed": "https://schema.org/KingBed"Right"typeOfBed": "King" (Text - schema.org has not published BedType enum members)Schema.org defines BedType as an enumeration but has not published any enum members for it. Made-up URLs like https://schema.org/KingBed will fail validation. Use plain text strings until schema.org publishes official members.
- 04
amenityFeature as a string array
Wrong"amenityFeature": ["WiFi", "Dishwasher"]Right"amenityFeature": [{ "@type": "LocationFeatureSpecification", "name": "WiFi", "value": true }]amenityFeature expects LocationFeatureSpecification objects with name and value (Boolean). The Boolean lets you express both presence and absence. Plain strings cannot indicate that an amenity is unavailable.
Schema properties in this example
About the example data
A Copenhagen apartment listing styled after Jane Xoo's historical residence near Rigshospitalet. The example uses generic Accommodation to demonstrate the full property set; for production listings prefer Apartment for self-contained units.
Comments
Loading comments...