Shopify integration
Shopify

Three steps to make Shopify legible to every AI engine

A Liquid snippet ships Organization + Product schema. robots.txt.liquid and /llms.txt stay in sync with the AI-bot allowlist. End-to-end in about 18 minutes.

Time required: ~18 minutes
Best for: Shopify merchants & theme devs

3-step setup

  1. 1

    Generate an API key and register your store domain

    Sign into AEO Pro → /dashboard/settings/api-keys → Generate new key. Then add both your shop's primary domain (my-shop.com) and the myshopify.com alias in Dashboard → Sites → Add Site so GoogleBot and GPTBot traffic both map back to your workspace.

  2. 2

    Create snippets/aeo-pro.liquid and include it from theme.liquid

    In Shopify admin → Online Store → Themes → Edit code, create aeo-pro.liquid under Snippets and paste the code below (swap in your aeopro_ key). Then include {%- render 'aeo-pro' -%} once in layout/theme.liquid, just before </head>.

    Code sampleliquid · snippets/aeo-pro.liquid
    {%- comment -%}
      AEO Pro · Schema + llms.txt injector
      Drop in snippets/aeo-pro.liquid, then include once from theme.liquid:
        {%- render 'aeo-pro' -%}
      Replace the api_key constant with your aeopro_ key.
    {%- endcomment -%}
    {%- assign api_key = 'aeopro_xxxxxxxxxxxxxxxxxxxxxxxxxxxx' -%}
    {%- assign endpoint = 'https://www.aeo-pro.app/api/v1/schema/generate' -%}
    
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Organization",
      "name": "{{ shop.name | escape }}",
      "url": "{{ shop.url }}",
      "logo": "{{ shop.brand.logo | image_url: width: 512 | default: 'https://www.aeo-pro.app/icon' }}"
    }
    </script>
    
    {%- if template contains 'product' and product -%}
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "Product",
      "name": {{ product.title | json }},
      "image": [{{ product.featured_image | image_url: width: 1200 | json }}],
      "description": {{ product.description | strip_html | truncate: 600 | json }},
      "sku": {{ product.selected_or_first_available_variant.sku | json }},
      "brand": { "@type": "Brand", "name": {{ shop.name | json }} },
      "offers": {
        "@type": "Offer",
        "url": "{{ shop.url }}{{ product.url }}",
        "priceCurrency": {{ shop.currency | json }},
        "price": {{ product.selected_or_first_available_variant.price | money_without_currency | json }},
        "availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}"
      }
    }
    </script>
    {%- endif -%}
    
    <link rel="aeopro-citation-stream"
          href="https://www.aeo-pro.app/api/v1/citations/stream?shop={{ shop.permanent_domain }}"
          data-api-key="{{ api_key }}">
  3. 3

    Ship the AI-bot allowlist via robots.txt.liquid + llms.txt redirect

    OS 2.0 stores edit robots.txt via robots.txt.liquid. Copy the suggested block from AEO Pro Dashboard → Sites → your shop → robots tab. For llms.txt, add a 301 from /llms.txt to https://www.aeo-pro.app/llms/{shop-handle}.txt at your CDN or DNS host so we can refresh it without redeploys.

    Code sampleliquid · layout/theme.liquid
    {%- comment -%}
      Add this once in layout/theme.liquid, just before </head>:
    {%- endcomment -%}
    {%- render 'aeo-pro' -%}

FAQ

What about Hydrogen / Headless?
Skip the Liquid snippet on Headless. Call /api/v1/schema/generate from your SSR layer and inject the resulting JSON-LD into <Head>. Same API key, same workspace, billed per shop.
Does this violate Shopify App rules?
No. The integration is a Liquid snippet plus an external REST call — no Shopify App API, no Customer Data. The native AEO Pro Shopify App is in review and lands Q3 2026.
Does OS 1.0 (legacy themes) work?
Yes, with two caveats: place the snippet under templates/ instead of sections/, and paste the robots.txt suggestions directly into the legacy robots.txt (OS 1.0 has no .liquid variant).
Can I inject Product schema only on specific products?
Yes — wrap the Product block with an if check, e.g. {% if product.metafields.aeo.enabled == true %}…{% endif %}. Use the Metafields editor to toggle per product.

Want to see how your store scores first?

30-second scan, three-dimensional score, top 5 fixable issues. No sign-up, no card.