XooCode(){

TouristAttraction

TouristAttraction describes points of interest that travelers visit: landmarks, museums, parks, historic sites, conference centers, viewpoints. It is a Place subtype, not a LocalBusiness subtype, because not every attraction is a business (a public monument is a TouristAttraction but not a business). Google uses it for travel-related searches, Google Maps points of interest, and Google Travel integration.

TouristAttraction adds travel-specific properties: touristType (what kind of tourists visit), availableLanguage (languages spoken or offered on tours), and isAccessibleForFree. It also supports all Place properties: address, geo, openingHours, photo, and containedInPlace for geographic nesting.

Full example of schema.org/TouristAttraction json-ld markup

The markup is verified as valid with Rich Results Test from Google.

Highlight legend:Required by GoogleRecommendedOptional
schema.org/TouristAttraction
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@id": "https://thunderdomedunmore.com#attraction",
  "@type": "TouristAttraction",
  "name": "The Thunderdome",
  "alternateName": "Thunderdome Conference Center",
  "description": "Multi-purpose conference center and event venue in downtown Dunmore, Pennsylvania. Home to XooCon, local arts festivals, and community events since 2012. Features a 2,000-seat main hall, rooftop terrace, and public art gallery.",
  "url": "https://thunderdomedunmore.com",
  "image": [
    "https://thunderdomedunmore.com/images/exterior-1x1.jpg",
    "https://thunderdomedunmore.com/images/exterior-4x3.jpg",
    "https://thunderdomedunmore.com/images/exterior-16x9.jpg"
  ],
  "telephone": "+1-570-555-0300",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "500 Main Street",
    "addressLocality": "Dunmore",
    "addressRegion": "PA",
    "postalCode": "18512",
    "addressCountry": "US"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": 41.4192,
    "longitude": -75.6345
  },
  "touristType": ["Tech enthusiasts", "Conference attendees", "Art lovers"],
  "availableLanguage": ["English", "Spanish"],
  "isAccessibleForFree": false,
  "publicAccess": true,
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "09:00",
      "closes": "22:00"
    },
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Saturday", "Sunday"],
      "opens": "10:00",
      "closes": "18:00"
    }
  ],
  "containedInPlace": {
    "@type": "City",
    "name": "Dunmore",
    "containedInPlace": {
      "@type": "State",
      "name": "Pennsylvania"
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.4",
    "reviewCount": "527",
    "bestRating": "5"
  }
}
</script>

touristType

touristType describes the kind of tourists the attraction targets. It can be a simple string ("Families", "History enthusiasts") or an Audience object with audienceType. Google reads this to match attractions to traveler queries like "family attractions near me" or "history sites in Dunmore." Use terms that match how travelers actually search.

availableLanguage

availableLanguage lists languages in which the attraction offers services (audio guides, signage, guided tours). It takes a string, array of strings, or Language objects. Google displays this in the knowledge panel for international travelers. Use ISO language names ("English", "Spanish") or BCP 47 codes ("en", "es").

TouristAttraction vs Place vs LocalBusiness

Use LocalBusiness (or its subtypes) when the entity is primarily a business that charges for services. Use TouristAttraction when the entity is primarily a destination that travelers visit. Some entities are both: a museum is a TouristAttraction and could also be an EntertainmentBusiness. In that case, you can use multiple types with "@type": ["TouristAttraction", "EntertainmentBusiness"].

isAccessibleForFree and publicAccess

isAccessibleForFree is a Boolean indicating whether admission is free. publicAccess is a Boolean indicating whether the attraction is open to the general public (vs. requiring membership or invitation). Both are important filters for travelers. A park is typically both free and public. A private members-only club is neither.

Minimal valid version

The smallest markup that still produces a valid TouristAttraction 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.

schema.org/TouristAttraction (minimal)
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "TouristAttraction",
  "name": "The Thunderdome",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "500 Main Street",
    "addressLocality": "Dunmore",
    "addressRegion": "PA"
  }
}
</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.

Common TouristAttraction 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.

  1. 01

    Using LocalBusiness for a public landmark

    Wrong
    "@type": "LocalBusiness" for a public monument, park, or historic site
    Right
    "@type": "TouristAttraction"

    LocalBusiness implies a commercial entity that sells goods or services. Public landmarks, monuments, and parks are TouristAttractions. Using LocalBusiness for a non-commercial attraction gives Google the wrong business category and may trigger irrelevant knowledge panel fields (price range, payment methods).

  2. 02

    Missing isAccessibleForFree

    Wrong
    TouristAttraction with no isAccessibleForFree
    Right
    "isAccessibleForFree": false (or true for free attractions)

    Travelers frequently filter attractions by cost. Omitting isAccessibleForFree means Google and AI assistants cannot answer "free things to do in Dunmore." Always specify this, even for paid attractions, so the filter works correctly.

  3. 03

    touristType too generic

    Wrong
    "touristType": "Tourists"
    Right
    "touristType": ["Tech enthusiasts", "Conference attendees", "Art lovers"]

    touristType should describe the specific audience, not just "tourists." Specific types let Google match the attraction to traveler interests. "Families", "History enthusiasts", "Adventure travelers" are more useful than generic labels.

  4. 04

    Confusing containedInPlace with address

    Wrong
    containedInPlace with a full street address (duplicating the address property)
    Right
    containedInPlace with geographic hierarchy: City > State > Country

    address is for the street address. containedInPlace is for geographic nesting: the attraction is in a city, which is in a state, which is in a country. Do not duplicate the street address in containedInPlace. The two properties serve different purposes.

About the example data

The Thunderdome is the Dunmore conference center from the Event example, where XooCon takes place. Here it is marked up as a TouristAttraction, showing it from the traveler's perspective rather than as an event venue. Hotel Dunmore guests walk to it for conferences and events.

Comments

Loading comments...

Leave a comment