LovedByAI
``` It doesn't see \"$150 per person\" or \"starts at 9 AM.\" It sees an empty `
`. If the AI cannot read the price and the schedule, it cannot recommend you. ## How do I structure tour data for AI context windows? You need to bypass the visual layer and serve structured data directly to the machine. Schema.org has a specific definition for this: `Tour` (or `Event` for specific dates). Most WordPress SEO plugins handle basic articles well, but they fail miserably at complex tour data unless you force them to work. You need to explicitly tell the AI engines: \"This is a tour, this is the price, and here is the itinerary.\" Here is the JSON-LD structure you should be injecting into the `` of your tour pages. This is the language ChatGPT speaks natively. ```json { \"@context\": \"https://schema.org\", \"@type\": \"Tour\", \"name\": \"Midnight Ghost Tour of Savannah\", \"description\": \"A 2-hour walking tour through the historic district visiting 4 haunted locations.\", \"offers\": { \"@type\": \"Offer\", \"price\": \"35.00\", \"priceCurrency\": \"USD\", \"availability\": \"https://schema.org/InStock\", \"url\": \"https://savannahghosts.com/book\" }, \"itinerary\": { \"@type\": \"ItemList\", \"numberOfItems\": 2, \"itemListElement\": [ { \"@type\": \"ListItem\", \"position\": 1, \"item\": { \"@type\": \"TouristAttraction\", \"name\": \"Colonial Park Cemetery\", \"description\": \"Visit the oldest cemetery in Savannah.\" } }, { \"@type\": \"ListItem\", \"position\": 2, \"item\": { \"@type\": \"TouristAttraction\", \"name\": \"The Olde Pink House\", \"description\": \"Hear the story of James Habersham.\" } } ] }, \"provider\": { \"@type\": \"TravelAgency\", \"name\": \"Savannah Ghosts\", \"url\": \"https://savannahghosts.com\" } } ``` If you paste this into a validator, you will see it breaks down the tour into data points. ChatGPT ingests this `Tour` object and can instantly answer questions like \"How much is the ghost tour?\" or \"Does it go to the cemetery?\" without having to parse your marketing copy. ## Which WordPress tools actually help with AI visibility? You don't need to write that JSON by hand for every product. However, you do need tools that handle *custom* schema, not just the \"Article\" schema that comes default with most SEO plugins. ### 1. Schema Pro (or similar advanced injectors) Standard plugins like Yoast or RankMath are fantastic for general SEO, but they often struggle with the granularity of `itinerary` properties in the `Tour` schema out of the box. [Schema Pro](https://wpschema.com/) allows you to map custom fields (ACF) to specific schema properties. If you use Advanced Custom Fields (ACF) to manage your tour data (e.g., a field for 'Duration' and a field for 'Price'), you can map those directly to the schema output. This ensures that if you update the price in your backend, the signal sent to AI updates automatically. ### 2. The \"Code Snippets\" Method Sometimes, plugins add too much bloat. If you are comfortable with a little PHP, the cleanest way to add this is often a simple function in your `functions.php` or a site-specific plugin. This keeps your DOM light and your Time to First Byte (TTFB) low—a crucial metric for AI bots. Here is a robust snippet that pulls data from a hypothetical WooCommerce product to generate a `Tour` schema. ```php add_action('wp_head', 'add_tour_schema'); function add_tour_schema() { // Only run on single product pages if (!is_product()) return; global $product; // Check if this product is a tour (using a category or tag) if (!has_term('tours', 'product_cat', $product->get_id())) return; $schema = [ '@context' => 'https://schema.org', '@type' => 'Tour', 'name' => $product->get_name(), 'description' => strip_tags($product->get_short_description()), 'offers' => [ '@type' => 'Offer', 'price' => $product->get_price(), 'priceCurrency' => get_woocommerce_currency(), 'availability' => $product->is_in_stock() ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock' ] ]; echo ''; } ``` ### 3. LovedByAI (The Audit) Before you start installing plugins, you need to know what the machines currently see. You can [check your site](https://www.lovedby.ai/tools/wp-ai-seo-checker) to see if your tour data is actually rendering in a way that LLMs can digest. It’s common to think you have schema because a plugin is active, only to find out it's outputting empty strings because of a configuration error. ## Does your booking software kill your rankings? This is the silent killer for tour companies. I’ve seen beautiful WordPress sites built on [GeneratePress](https://generatepress.com) or Astra that are lightning fast, but the actual product content is injected via JavaScript from a third-party booking engine. If you inspect your page source (Right Click -> View Source) and you cannot find the text of your itinerary or your pricing in the raw HTML, you have a problem. **The Fix:** Most booking providers (FareHarbor, Bokun, Peek) offer API access or \"item grid\" widgets. Do not rely solely on the widget. 1. Manually write the itinerary details into the WordPress editor (Gutenberg blocks). 2. Use the booking widget *only* for the final \"Book Now\" button. 3. Wrap your manual text in standard HTML tags like `

`, `