AI

Quick-Start Guide: Make Your Website Agent-Ready with Tealium iQ

AI agents like ChatGPT, Gemini, and Perplexity are shopping for your customers right now. When an agent searches for a product, it reads your webpage the same way Google’s crawler does — but instead of ranking you in search results, it’s deciding whether to recommend your product or your competitor’s.

Tealium iQ can inject structured data on every product page today — using the same data layer you already have. No developer needed. No site code changes.

What We’re Building

We’re adding schema.org JSON-LD structured data to product pages via a Tealium iQ JavaScript Code extension. This creates machine-readable product information that AI agents can parse when they retrieve the page.

Before — without structured data

A wall of HTML, CSS, and marketing copy. The agent has to guess the product name, price, and stock status — it often guesses wrong or skips to a competitor with cleaner data.

After — with structured data

A clean JSON object: Nike Air Pegasus 41, $129.99, in stock, 4.7/5 from 12,483 reviews, 60-day free returns. The agent reasons about all of this instantly.

Step-by-Step Setup

1
Confirm the Data Layer Has Product Attributes

Before you configure anything, verify that the brand’s utag_data object includes product-level variables on product pages. Open a product page with the Tealium Tools browser extension and check for these variables:

Variable Example Value Required?
product_name “Nike Air Pegasus 41” ✅ Yes
product_id / product_sku “NP-41-BLK-11” ✅ Yes
product_price “129.99” ✅ Yes
page_type “product” ✅ Yes (load rule)
product_brand “Nike” Recommended
product_category “Running Shoes” Recommended
product_description “Neutral daily trainer…” Recommended
product_rating “4.7” Recommended
product_review_count “12483” Recommended
product_availability “in stock” Recommended
product_currency “USD” Recommended
product_image_url “https://…” Optional

If the data layer doesn’t have these: Work with the customer to add them. Most e-commerce platforms (Shopify, Magento, Salesforce Commerce) already populate these — they may just need to be mapped in TiQ.

If you’re missing ratings or review data: That’s fine. The extension handles missing values gracefully. Add what you have; more is better.

2
Add the JavaScript Code Extension

In Tealium iQ: ExtensionsAdd ExtensionJavaScript Code

  • Name: Agent-Ready Structured Data (JSON-LD)
  • Scope: All Tags  |  Execution: After Load Rules
  • Condition: page_type equals product

Paste the following code:

// Agent-Ready Structured Data Injection
// Injects schema.org JSON-LD for AI agent consumption
// Only runs on product pages (gated by extension condition)

(function() {
  if (window.__tealium_agent_schema_injected) return;
  window.__tealium_agent_schema_injected = true;

  var product = {
    "@context": "https://schema.org",
    "@type": "Product",
    "name": b['product_name'] || '',
    "sku": b['product_id'] || b['product_sku'] || '',
    "description": b['product_description'] || '',
    "brand": {
      "@type": "Brand",
      "name": b['product_brand'] || ''
    },
    "offers": {
      "@type": "Offer",
      "price": b['product_price'] || '',
      "priceCurrency": b['product_currency'] || 'USD',
      "availability": (b['product_availability'] || '').toLowerCase() === 'in stock'
        ? 'https://schema.org/InStock'
        : 'https://schema.org/OutOfStock',
      "url": window.location.href
    }
  };

  if (b['product_category']) product.category = b['product_category'];
  if (b['product_image_url']) product.image = b['product_image_url'];

  if (b['product_rating'] && b['product_review_count']) {
    product.aggregateRating = {
      "@type": "AggregateRating",
      "ratingValue": b['product_rating'],
      "reviewCount": b['product_review_count'],
      "bestRating": "5"
    };
  }

  if (b['product_return_days']) {
    product.hasMerchantReturnPolicy = {
      "@type": "MerchantReturnPolicy",
      "merchantReturnDays": b['product_return_days'],
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow"
    };
  }

  var script = document.createElement('script');
  script.type = 'application/ld+json';
  script.text = JSON.stringify(product);
  document.head.appendChild(script);
})();

Click Apply, then Save the profile.

3
Add Agent-Friendly Meta Tags (Optional but Recommended)

Name: Agent Meta Tags  |  Same scope and condition as Step 2.

// Agent-Friendly Meta Tags

(function() {
  if (window.__tealium_agent_meta_injected) return;
  window.__tealium_agent_meta_injected = true;

  var metas = [
    { property: 'product:price:amount',    content: b['product_price'] },
    { property: 'product:price:currency',  content: b['product_currency'] || 'USD' },
    { property: 'product:availability',    content: b['product_availability'] || '' },
    { property: 'product:brand',           content: b['product_brand'] || '' },
    { property: 'product:category',        content: b['product_category'] || '' }
  ];

  if (b['loyalty_message']) {
    metas.push({ property: 'product:loyalty_offer', content: b['loyalty_message'] });
  }
  if (b['product_repeat_purchase_rate']) {
    metas.push({ property: 'product:repeat_purchase_rate', content: b['product_repeat_purchase_rate'] });
  }

  metas.forEach(function(m) {
    if (m.content) {
      var tag = document.createElement('meta');
      tag.setAttribute('property', m.property);
      tag.setAttribute('content', m.content);
      document.head.appendChild(tag);
    }
  });
})();

4
Supercharge with Moments API / DLE Data (Advanced)

If the brand has Moments API or Data Layer Enrichment enabled, you can inject CDP profile data into the structured markup — the agent sees personalized product data, not just generic page data. Add this after the product object in the JSON-LD extension:

if (b['loyalty_points_balance']) {
  product.offers.priceSpecification = {
    "@type": "PriceSpecification",
    "price": b['product_price'],
    "priceCurrency": b['product_currency'] || 'USD'
  };
  product.additionalProperty = product.additionalProperty || [];
  product.additionalProperty.push({
    "@type": "PropertyValue",
    "name": "loyaltyDiscount",
    "value": b['loyalty_points_balance'] + " points available"
  });
}

if (b['product_affinity_score']) {
  product.additionalProperty = product.additionalProperty || [];
  product.additionalProperty.push({
    "@type": "PropertyValue",
    "name": "recommendationStrength",
    "value": b['product_affinity_score']
  });
}

What this does: When an agent retrieves this page for a known visitor, the structured data includes personalized loyalty pricing and affinity scores — the data that tips an agent’s decision from “cheapest option” to “best option for this customer.”

5
Validate

  • Publish to Dev environment.
  • Open a product page → DevTools → Elements → search for application/ld+json. Verify the JSON-LD is present and populated correctly.
  • Google’s Rich Results Test: search.google.com/test/rich-results — paste the page URL and confirm valid structured data.
  • Test with an agent: Open ChatGPT, ask it to find the product, and see if the structured data influences the response.
  • Publish to QA then Prod when validated.

6
Measure Using the CDP You Already Have

AudienceStream rule (configure server-side):

  • referrer contains chatgpt.com → set acquisition_channel = “ai_agent_chatgpt”
  • referrer contains gemini.google.com → set acquisition_channel = “ai_agent_gemini”
  • referrer contains perplexity.ai → set acquisition_channel = “ai_agent_perplexity”

Build an audience: “AI Agent Referred Visitors” — then compare conversion rates, AOV, and LTV for agent-referred traffic vs. organic. That number is probably already 5–10% of your traffic and growing. Nobody’s measuring it yet.

Template for Different Page Types

The product page is the highest priority. Here are the schema types for other pages:

Page Type Schema Type Key Properties
Product page Product name, price, rating, availability, brand, sku
Category page ItemList list of products with position, URL, name
Store/location LocalBusiness address, hours, phone, geo coordinates
FAQ page FAQPage questions and answers (agents love this)
Article/blog Article headline, author, datePublished, description
Organization Organization name, logo, social profiles, contact info

Priority order: Product → FAQ → Category → Organization → Article. FAQ pages are especially valuable — an agent searching for “does Brand X offer free returns?” will find the answer directly in the structured data without scraping the entire page.

If You Are Still on the Fence

“Why should I care about structured data for agents?”

AI agents are already shopping for your customers. When ChatGPT searches for running shoes, it reads your product pages the same way Google does. The brands with clean, machine-readable product data — price, ratings, availability, return policy — win the recommendation. Your competitors are starting to optimize for this. TiQ lets you do it today without touching your site code.

“How is this different from SEO?”

SEO structured data helps Google rank your page. Agent structured data helps AI recommend your product. The schema.org format is the same, but the intent is different. Google shows a link — an agent makes a purchase decision. The structured data needs to include things agents care about that Google doesn’t: return rates, repeat purchase rates, loyalty pricing, satisfaction scores. TiQ can inject all of this from your data layer.

“Can we personalize the structured data per visitor?”

Yes — if you have Moments API or Data Layer Enrichment, the TiQ extension can inject visitor-specific data into the markup. An agent retrieving the page for a known customer can see their loyalty balance, personalized pricing, and product affinity score right in the structured data. That’s the data that makes an agent pick your brand over the cheapest alternative.

“How do we know it’s working?”

We configure AudienceStream to tag visitors referred by AI agents — chatgpt.com, gemini.google.com, perplexity.ai — as a distinct channel. You’ll see the volume, conversion rate, and AOV for agent-referred traffic. That number is probably already 5–10% of your traffic and growing. Nobody’s measuring it yet.

How to Connect to Tealium MCP

Tealium’s MCP server uses Streamable HTTP transport — the standard MCP transport, meaning any MCP-compliant client can connect. The difference between providers is how the client connects:

OpenAI (ChatGPT / Agents SDK)

Two options on docs.tealium.com: Hosted MCP Tool (OpenAI manages the connection) or Streamable HTTP via MCPServerStreamableHttp.

Anthropic (Claude)

Claude supports MCP natively. Tealium uses Claude Code with MCP extensively internally. See the config blocks below for Claude Desktop and Claude Code.

Google (Gemini)

No native MCP yet. Options: create a Gemini Extension calling the Moments API REST endpoint directly, or use Vertex AI Agent Builder with a custom tool definition.

AWS Bedrock

Bedrock Agents support Action Groups. Define an OpenAPI schema for the Moments API endpoint and wire it as a Lambda or direct API Action Group.

Claude Desktop config:

{
  "mcpServers": {
    "tealium": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://us-west-2.prod.developer.tealiumapis.com/v1/personalization/mcp"
      ],
      "env": {
        "HEADERS": "X-Tealium-Api-Key:YOUR_API_KEY,Origin:https://example.com,Referer:https://example.com"
      }
    }
  }
}

Claude Code config (supports HTTP MCP natively):

{
  "mcpServers": {
    "tealium": {
      "type": "http",
      "url": "https://us-west-2.prod.developer.tealiumapis.com/v1/personalization/mcp",
      "headers": {
        "X-Tealium-Api-Key": "YOUR_API_KEY",
        "Origin": "https://example.com",
        "Referer": "https://example.com"
      }
    }
  }
}

For any MCP-compatible client, the MCP Inspector can verify connectivity — available on docs.tealium.com.

Next Steps After Setup

Once structured data is live and agent referral tracking is configured:

  • Register the brand’s MCP server as a ChatGPT GPT Action — so agents get personalized CDP data, not just page-level structured data.
  • Monitor MCP server logs for agent interaction patterns.
  • Propose the MCP event emission pipeline — agent interaction events flowing back into AudienceStream.

This TiQ configuration is Step 1 of the ladder. It’s free, it’s fast, and it gives the brand immediate visibility into agent-driven traffic while setting up the infrastructure for deeper agent integration.

Want a CDP that works with your tech stack?

Talk to a CDP expert and see if Tealium is the right fit to help drive ROI for your business.

Get a Demo