SEO for hotels and B&Bs on WordPress
SEO for hotels is mostly about winning your own brand search and the searches for your area, then sending those visitors to a direct booking engine. Generic searches like "hotels in Savannah" are dominated by Google's hotel results and the booking sites, and those rankings run on your Business Profile, price feeds and reviews more than on your website.
Your site's jobs are specific: rank first for your hotel's name ahead of the online travel agencies, answer the detailed questions guests ask before booking (parking, pets, check-in times, accessibility), and publish local guides that match how people plan a trip.
Pages every hotels site needs
- Room type pages. One page per room type with size, bed configuration, occupancy, view, accessibility features and real photos. Guests compare rooms, and OTAs rarely describe them well.
- Amenities and policies page. Parking and its cost, pets, check-in and check-out times, breakfast, Wi-Fi, accessibility and cancellation terms, all as text.
- Location and local guide pages. Distances to the sights, the airport and the convention center, plus guides to your neighborhood written by your staff.
- Meetings and weddings pages. Event spaces with capacities, floor plans and packages. These searches have their own wording and are high value.
- Offers page. Direct-booking packages and member rates, which give people a reason to book with you rather than through a third party.
Win your own name back from the OTAs
When someone searches your hotel's name, booking sites and review platforms compete with you, and some buy ads on your name. Your homepage should make it obvious that it is the official site: the exact hotel name in the title tag and H1, the address, and a clear "Book direct" path.
Link your Business Profile's website field to your homepage and keep the name, address and phone identical on both. Give your site something the OTAs lack, such as detailed room pages, direct-booking offers and your own photography. Make sure the booking engine, often on a separate domain or subdomain, does not replace your room pages in search; the room content should live on your WordPress pages.
Where hotel prices in Google come from
The prices and booking links in Google's hotel results do not come from your structured data. They come from Google Hotel Center, fed by your booking engine or channel manager as a connectivity partner. Free booking links are available through the same route, so ask your booking engine provider whether they support it.
Schema still helps with the facts. Hotel (a LodgingBusiness subtype) supports checkinTime, checkoutTime, amenityFeature, petsAllowed, numberOfRooms and an official starRating. Use BedAndBreakfast, Hostel or Resort if that is what you are. Reviews you collect and mark up yourself are self-serving and do not produce stars, so leave aggregateRating out.
Local content that matches trip planning
Travelers search for the destination before the hotel: "things to do near the riverfront", "where to park for the stadium", "best time to visit". A local guide written by staff who live there, with specific places, walking times and seasonal advice, can rank for those searches and introduce your hotel at the start of the trip.
For events near you, such as festivals or conferences, publish a page with dates, distance and any package. Event markup is for events you host; do not mark up someone else's festival as your event. Update or remove seasonal pages after they pass, and redirect old event pages to the guide they belong to with the Redirection Manager.
Hotel schema example
A starting point for your site. Replace every value with your own, and only mark up what is visible on the page.
{
"@context": "https://schema.org",
"@type": "Hotel",
"@id": "https://example.com/#hotel",
"name": "The Marlowe House Hotel",
"url": "https://example.com/",
"telephone": "+1-912-555-0150",
"image": [
"https://example.com/images/facade.jpg",
"https://example.com/images/king-room.jpg"
],
"address": {
"@type": "PostalAddress",
"streetAddress": "31 E Harris St",
"addressLocality": "Savannah",
"addressRegion": "GA",
"postalCode": "31401",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 32.07383,
"longitude": -81.09012
},
"checkinTime": "15:00",
"checkoutTime": "11:00",
"numberOfRooms": 42,
"petsAllowed": true,
"starRating": {
"@type": "Rating",
"ratingValue": 4
},
"amenityFeature": [
{
"@type": "LocationFeatureSpecification",
"name": "Free Wi-Fi",
"value": true
},
{
"@type": "LocationFeatureSpecification",
"name": "On-site parking",
"value": true
}
]
}
Checklist
- Put the exact hotel name and city in the homepage title and H1
- Build a page for every room type with dimensions and real photos
- Publish parking, pet and check-in policies as text
- Ask your booking engine about Hotel Center and free booking links
- Add Hotel schema with check-in, check-out and amenities
- Leave self-collected review ratings out of your markup
- Write local guides with walking times from your front door
- Keep room content on WordPress, not only in the booking engine
- Redirect expired event and offer pages to relevant evergreen pages
Common questions
Can schema make my room prices show in Google?
No. Hotel prices in Google come from Hotel Center price feeds, usually supplied by your booking engine or channel manager. Schema describes the hotel's facts.
Should I use Hotel or LodgingBusiness?
Use the most specific type that is true: Hotel, Motel, Resort, BedAndBreakfast or Hostel. LodgingBusiness is the general parent type.
Why do booking sites outrank me for my own name?
They have strong domains and often bid on your name in ads. A clear official homepage, a consistent Business Profile and content they do not have make it easier for Google to rank you first.
Is a blog worth it for a small hotel?
A few thorough local guides usually beat a frequent blog. Write about what guests ask the front desk.