LovedByAI
Tour Companies GEO

Best ways to track AI traffic in GA4 for WordPress tour companies

Learn to track AI traffic in GA4 for WordPress tour companies. Identify hidden visitors from ChatGPT and Perplexity that often appear as direct traffic data.

15 min read
By Jenny Beasley, SEO/GEO Specialist
GA4 AI Tracking 101
GA4 AI Tracking 101

Travelers are done with endless scrolling through travel blogs. Instead, they are asking Perplexity, Claude, or ChatGPT to "plan a 3-day food tour itinerary in Mexico City with a focus on street tacos." When an AI engine recommends your booking page as the answer, that visitor has incredibly high intent. But there is a technical blind spot: standard Google Analytics 4 (GA4) setups often misclassify these AI-driven visitors as "Direct" traffic because LLMs don't always pass standard referral headers.

For WordPress tour operators, this creates a data gap. You might see a spike in bookings or traffic, but you cannot attribute it to your Generative Engine Optimization (GEO) efforts. You cannot double down on what works if you are flying blind.

Identifying this "hidden" AI traffic is the first step to dominating the new search reality. We need to configure GA4 to specifically recognize referrers from AI domains and filter them correctly. This guide breaks down exactly how to set up those filters for your WordPress site so you can stop guessing and start tracking the travelers finding you through AI.

Why is tracking AI referrals difficult for WordPress tour companies?

You check your Google Analytics 4 (GA4). "Direct" traffic has spiked by 15%. You might celebrate, thinking your brand awareness is growing. In reality, you are likely looking at "Dark Search" traffic - visitors coming from AI tools that GA4 doesn't know how to categorize.

For tour operators, this is particularly frustrating because your product is the content.

When a user asks ChatGPT, "Plan a 7-day itinerary for Kyoto," the AI scrapes your WordPress site. It reads your carefully crafted "Day 1" through "Day 7" breakdown, your hotel recommendations, and your transit tips. It then synthesizes this into a perfect answer for the user. The user gets the value of your expertise without ever visiting your site. This is the "Zero-Click" problem on steroids.

Even when the AI does provide a citation link, tracking that click is a technical nightmare.

  1. Referrer Stripping: Many AI interactions happen inside native apps (iOS/Android). When a user clicks a link in the ChatGPT app to view your "Best time to visit Patagonia" guide, the app often strips the Referer header for privacy. Your WordPress site sees the visit, but the source is blank. GA4 dumps this into the "Direct" bucket.
  2. The "noreferrer" Tag: AI responses are dynamically generated. The links they create often behave like links with rel="noreferrer" attributes, deliberately hiding the origin.
  3. Inconsistent User-Agents: Unlike Googlebot, which announces itself clearly, AI crawlers and referral agents are fragmented. You might see traffic from OAI-SearchBot or [GPTBot](/blog/wordpress-gptbot-best-tools-optimization-2026) in your server logs, but mapping that to a specific human visit is difficult.

However, not all is lost. "Answer Engines" like Perplexity and SearchGPT are getting better at attribution. They act more like search engines and less like chat tools.

To spot these in your WordPress analytics, you need to look for specific referral paths that standard plugins often miss. If you check your raw server logs, you might find referral strings like:

https://chatgpt.com
https://www.perplexity.ai
android-app://com.google.android.googlequicksearchbox/

If your WordPress site isn't configured to catch these specific referrers, you are flying blind. You might be optimizing for keywords while your actual audience is asking questions to an LLM.

This is why we recommend tour companies check their site to see if their content is even structured correctly for these engines to parse. If the AI can't easily read your <div> structures or <table> elements containing pricing, it might ignore you entirely - or worse, hallucinate your prices.

Tools like LovedByAI can help by injecting specific Entity Schema and Tour Structured Data. This ensures that when an AI does scrape your itinerary, it understands exactly who you are, increasing the likelihood of a citation link rather than just a stolen summary.

Tracking is hard, but getting the citation in the first place is the battle you can actually win.

How can I configure GA4 to spot AI visitors on my WordPress site?

Standard Google Analytics 4 (GA4) setups are notoriously bad at categorizing AI traffic. Most of it gets dumped into "Referral" or, worse, the black hole of "Direct" traffic. For a tour operator, knowing if a high-value booking for a "10-Day Safari" came from a travel blog or a Perplexity recommendation is critical for your marketing spend.

To fix this, you need to manually tell GA4 what an "AI Engine" looks like.

Go to your GA4 Admin panel, navigate to Data Settings > Channel Groups, and create a new custom group called "AI Search." You will need to define the matching conditions based on the Source parameter.

Here is a regex pattern you can use to capture the major players:

chatgpt|openai|bard|bing|perplexity|claude|copilot

However, the tricky part for WordPress sites is the mobile traffic. A significant chunk of AI-driven search (especially Google SGE and Discover) shows up with a referral path starting with android-app.

If you see android-app://com.google.android.googlequicksearchbox/ in your reports, that is often a signal of intent-driven traffic from Google's ecosystem that isn't quite traditional "Organic Search."

capturing the data in WordPress

To ensure this data even reaches GA4 accurately, your WordPress setup needs to pass the correct headers. Many heavy caching plugins strip referrer data to speed up Time to First Byte (TTFB).

check your security headers in your .htaccess or security plugin. If you have a strict Referrer-Policy set to no-referrer, you are blinding yourself. Change it to strict-origin-when-cross-origin.

You can also use a plugin like GTM4WP to push cleaner data layers. This allows you to fire specific events when a user lands from a known AI source.

For example, you could add a snippet to your functions.php (or use a code snippets plugin) to tag sessions specifically:

add_action( 'wp_head', 'track_ai_referrals' );

function track_ai_referrals() {
    $referrer = wp_get_referer();
    
    // Check if referrer matches known AI domains
    if ( strpos( $referrer, 'perplexity.ai' ) !== false || strpos( $referrer, 'chatgpt.com' ) !== false ) {
        echo '';
        echo 'gtag("event", "ai_visit", { "ai_source": "' . esc_js( $referrer ) . '" });';
        echo '';
    }
}

Note: Always use wp_get_referer() instead of accessing $_SERVER['HTTP_REFERER'] directly for better security sanitization.

Once you can see the traffic, you need to ensure those visitors convert. AI users are looking for specific answers - prices, dates, and itineraries. If your site structure is messy, they bounce.

This is where LovedByAI becomes useful. It can scan your tour pages and inject Structure Data (like TourBooking or Events schema) that helps AI engines parse your pricing and availability instantly. If the AI understands your data, it sends you qualified leads who already know the price, rather than confused browsers.

For a deeper dive on manual configuration, Google's official documentation on Custom Channel Groups is the best place to start. You might also want to read up on Referrer-Policy directives to ensure your server isn't stripping valuable data before it hits Analytics.

What steps can tour companies take to improve visibility in AI answers?

AI models like GPT-4 and Claude do not "read" your tour pages the way a human does. They parse them for entities: locations, durations, prices, and logistical facts. If your 7-day itinerary is buried inside a 2,000-word narrative block without clear HTML structure, the AI might miss the details entirely.

To rank in Generative Engine Optimization (GEO), you must structure your content so a machine can extract the facts without guessing.

Structure your itinerary data

Most WordPress tour themes wrap itinerary steps in generic <div> classes that mean nothing to a crawler.

To fix this, switch to semantic HTML. Use definition lists (<dl>, <dt>, <dd>) for daily breakdowns or clear Heading structures (<h3> for "Day 1", <h4> for "Morning Activity"). This helps the Large Language Model (LLM) distinguish between a "stop" and a "passing mention."

If you list pricing in a paragraph ("The tour costs $500 roughly..."), the AI often hallucinates the final cost. Put it in a <table> or a distinct list item (<li>) with a clear label.

The power of 'TouristTrip' Schema

Standard SEO tools often stop at Article or basic Product schema. For a tour operator, this is insufficient. You need TouristTrip or Event schema nested with Offer details. This tells the AI explicitly: "This is a 6-hour activity, starting at 09:00, costing $150."

Here is what a simplified JSON-LD structure should look like for a tour day:

{
  "@context": "https://schema.org",
  "@type": "TouristTrip",
  "name": "Kyoto Temple Walk",
  "description": "A 4-hour guided walking tour of Northern Kyoto temples.",
  "itinerary": {
    "@type": "ItemList",
    "itemListElement": [
      {
        "@type": "TouristAttraction",
        "name": "Kinkaku-ji",
        "url": "https://example.com/kinkaku-ji"
      },
      {
        "@type": "TouristAttraction",
        "name": "Ryoan-ji",
        "url": "https://example.com/ryoan-ji"
      }
    ]
  },
  "offers": {
    "@type": "Offer",
    "price": "50.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}

Manually writing this nested code for every tour is error-prone. One syntax error can break the entire block. This is where LovedByAI is valuable - it scans your existing tour content and auto-injects the correct, nested schema (like TouristTrip or Events) into the <head> without you needing to touch the PHP files.

Converting zero-click searches

The fear of "Zero-Click" searches is real. If the AI answers the user's question about "best time to visit," they might not click. However, answer engines like Perplexity cite the most authoritative source.

You become that source by being the most specific.

Don't just write "We offer great lunches." Write "Lunch includes a bento box from Izusen (est. 1920)." Specific entities (names, dates, historical facts) increase the "information gain" score of your content. High information gain leads to citations.

Check Google's documentation on structured data to see exactly which properties are required. Additionally, referencing the Schema.org definition for TouristTrip can help you map out your specific tour features.

By feeding the AI structured facts, you turn a "Zero-Click" summary into a branded recommendation.

Is your WordPress tour site structured for the AI search era?

Your beautiful booking calendar might be invisible to ChatGPT.

Most modern tour sites rely on heavy JavaScript widgets - like FareHarbor, Peek, or Bokun integrations - to handle availability. While these provide a great user experience for humans, they often render as empty containers to a crawler. If your pricing and dates are locked inside an iframe or a dynamic <div> that loads three seconds after the DOM, AI search engines (Answer Engines) simply assume your tour is "unavailable" or "price unknown."

To fix this, you must decouple your data from your display. The crawler shouldn't have to execute JavaScript to know you run a "10-Day Safari" starting at $2,500.

Cleaning up the code for crawlers

You need to inject the core facts directly into the HTML source using JSON-LD. This acts as a "cheat sheet" for the AI. When a bot like Perplexity scans your page, it looks for TouristTrip schema to understand the itinerary and Offer schema to understand the price.

Here is a streamlined WordPress function to output this data safely in your <head> without relying on your booking widget to load:

add_action( 'wp_head', 'inject_static_tour_data' );

function inject_static_tour_data() {
    if ( ! is_singular( 'tours' ) ) {
        return;
    }

    $tour_data = [
        '@context'    => 'https://schema.org',
        '@type'       => 'TouristTrip',
        'name'        => get_the_title(),
        'description' => get_the_excerpt(),
        'offers'      => [
            '@type'         => 'Offer',
            'price'         => '2500.00', // Retrieve this dynamically from your custom fields
            'priceCurrency' => 'USD',
            'availability'  => 'https://schema.org/InStock',
            'url'           => get_permalink()
        ]
    ];

    echo '';
    echo wp_json_encode( $tour_data );
    echo '';
}

By placing this code in your functions.php or a custom plugin, you ensure the price is visible even if the booking calendar script fails or gets blocked.

Validating for Answer Engine Optimization (AEO)

Once implemented, traditional SEO tools might not give you the full picture. Google's Rich Results Test is a good baseline, but it checks for compliance, not comprehension.

To truly test for AEO, you need to see if the entities are connected. Does the AI understand that the "Morning Hike" is part of the "3-Day Adventure"?

If manually constructing nested JSON arrays feels risky (a missing comma breaks the whole block), tools like LovedByAI can automatically scan your existing tour descriptions and generate the correct nested schema structure for you. This ensures your "Day 1" and "Day 2" itinerary details are properly categorized as subTrip items within the main TouristTrip entity, giving you a better chance of being cited as the authoritative source for your specific destination.

For more details on the specific properties required for tours, referencing the Schema.org TouristTrip documentation is essential.

How to Track "AI Search" Traffic in GA4 for Tour Operators

If a traveler asks ChatGPT for "unique boat tours in Chicago" and clicks your link, standard analytics usually dump that visitor into the "Direct" or "Referral" bucket. You lose visibility on whether your GEO (Generative Engine Optimization) efforts are actually driving bookings.

For WordPress-based tour companies, distinguishing between a human search and an AI citation is critical for deciding which itinerary pages need better Trip schema. Here is how to create a dedicated "AI Search" channel in Google Analytics 4.

Step-by-Step Implementation

  1. Open Admin: Go to your GA4 property and click the Admin gear icon.
  2. Navigate to Channel Groups: Under Data Display, select Channel Groups.
  3. Create New Group: Click "Create new channel group" and name it AI Search or Generative Engines.
  4. Define the Condition:
    • Set the parameter to Source.
    • Set the condition to matches regex.
    • Paste the following string into the value field:

(chatgpt|openai|bing|bard|gemini|perplexity|claude|copilot)

  1. Save and Wait: Click Save. Note that this does not apply retroactively; it will only categorize new traffic starting 24 hours after creation.

The WordPress Connection

While the configuration happens in GA4, the data you gather here directly informs your WordPress strategy. If you see traffic from perplexity landing on your "Private Grand Canyon Tour" page, but zero conversions, your content might be answering the user's question so thoroughly inside the AI interface that they don't need to book.

Conversely, if you see zero traffic in this new channel, your WordPress site likely lacks the structured data LLMs need to "read" your tours. We often see tour operators using heavy page builders that clutter the HTML. Tools like LovedByAI can help by scanning your tour pages and injecting clean, nested JSON-LD (like Offer and Itinerary) that these engines crave, without breaking your visual theme.

Warning: Always test your regular expression using a tool like Regex101 before saving. A bad regex can accidentally capture traffic that belongs to organic search (like standard Bing traffic), muddying your data.

For more details on default channel definitions, check Google's official documentation.

Conclusion

You can't fix what you don't measure. By setting up these specific referral filters in GA4, you are doing more than just cleaning up your analytics - you are future-proofing your booking pipeline. The shift from traditional search to answer engines is happening fast, and tour operators who can identify AI-driven traffic today will be the ones dominating the market next season.

Don't panic if your initial AI referral numbers look small. This is a completely new channel. The goal right now is to establish a baseline so you can see exactly which optimizations move the needle. Treat your data as a feedback loop: if a specific tour page starts getting hits from Perplexity, double down on the structured data for that experience.

For a complete guide to AI SEO strategies for Tour Companies, check out our Tour Companies AI SEO landing page.

Jenny Beasley

Jenny Beasley is an SEO and GEO specialist focused on helping businesses improve their visibility across traditional search and AI-driven platforms.

Frequently asked questions

No, not by default. Most traffic from ChatGPT and other LLMs arrives without a specific referrer header, causing Google Analytics 4 (GA4) to categorize it as "Direct" or occasionally generic "Referral" traffic. Unlike traditional search engines that pass query data, AI chat interfaces often strip this information. To accurately track this, you generally need to analyze server logs for specific user agents (like `OAI-SearchBot`) or use specialized tracking parameters in your links. Relying solely on standard GA4 reports will likely hide the growing influence of AI on your traffic sources.
AI engines now handle the "discovery" phase, eliminating zero-intent clicks. Previously, travelers visited your site just to check weather, packing lists, or opening hours - metrics that boosted traffic numbers but rarely led to revenue. Now, tools like ChatGPT or Perplexity answer these informational queries instantly in the chat interface. The users who actually click through to your site are no longer just researching; they have finished planning and are clicking specifically to buy tickets. Your top-of-funnel traffic volume drops, but your conversion rate improves because the remaining visitors are pre-qualified and ready to pay.
Yes, your theme's code structure is critical. Many WordPress tour themes rely on heavy JavaScript builders that hide itineraries and pricing behind complex DOM elements. If an AI bot cannot easily parse the HTML to find your "Book Now" button or departure dates, it will likely ignore your tour in its recommendations. To fix this, you must ensure your critical data is accessible in plain HTML or [Schema.org](https://schema.org) markup. Some sites use tools to generate a dedicated **AI-Friendly Page** - a stripped-down version of the content specifically designed for LLMs to read without rendering heavy visual scripts.

Ready to optimize your site for AI search?

Discover how AI engines see your website and get actionable recommendations to improve your visibility.