JSON-LD for PrestaShop: How to Add Product Schema Without a Developer

If you have a PrestaShop store and want ChatGPT, Gemini, and Google to see your products as structured data, paste the JSON-LD snippet with Product schema data into your product page template. No PHP required.

Online store product page with glowing JSON code floating above it, being read by an AI assistant light beam.
Direct Answer

If you have a PrestaShop store and want ChatGPT, Gemini, and Google to see your products as structured data, paste the <script type="application/ld+json"> snippet with Product schema data into your product page template. No PHP required.

The minimum fields are: name, image, offers (with price, priceCurrency, availability) and brand. Test after pasting: Google Rich Results Test at https://search.google.com/test/rich-results.

If you have a PrestaShop store, add JSON-LD Product schema to your product.tpl file, because AI agents and Google Rich Results read this data regardless of the page's appearance. Check: does the snippet have name, image, offers.price, offers.availability, and brand?

A customer asks ChatGPT: "Where can I buy running shoes with a carbon plate for under PLN 600?" or "What magnesium supplement is good for athletes?" If your PrestaShop store doesn't have Product schema, the AI model doesn't know you have that product, its price, or its availability. Google and AI agents read structured data as JSON text — independently of the page's appearance.

Lack of Product schema is the most common error detected by Audit AI in Polish e-commerce stores. Fixing it doesn't require a programmer — it requires knowing where to paste the ready-made code and what to change in it.

Key Takeaways

  • JSON-LD is the preferred format for structured data according to Google — it doesn't require changes to HTML; it's inserted as a separate <script> block.
  • Minimum Product schema consists of six fields: name, image, description, brand, offers.price, offers.availability. Without these, Google displays an error in the Rich Results Test.
  • PrestaShop 1.7 and 8.x allow you to add JSON-LD by editing the product.tpl file in the administration panel — no FTP, no PHP.
  • Not every store needs this. If you have fewer than 5 products or sell only services, the priority is low.
  • Testing takes 5 minutes — paste the product URL into the Rich Results Test and you'll see errors immediately.

Why This Is Important in 2026

Google has been showing rich snippets for several years — products with schema appear in search results with stars, prices, and availability. This isn't new. What's new is a second dimension: ChatGPT Search and Gemini use structured data to build shopping responses.

When a user asks AI about a product with a price, the model looks for data it can repeat without guessing. PrestaShop 1.7.x and 8.x do not generate full Product schema by default — the ps_shoppingcart module and the default Classic theme only create Open Graph metadata, not JSON-LD compliant with Google's requirements. Most Polish PrestaShop stores have this gap without realizing it's a gap.

Schema.org/Product has over 50 properties. Google and AI agents require just a few key ones — the rest are a bonus for specific categories (electronics, clothing, supplements).

Check now, before proceeding: go to https://search.google.com/test/rich-results and paste the URL of your main product. If you don't see a "Product" tab in the results — you have this gap, and this article is for you. Without Product schema, Google will not display the product's price or availability in search results, even if the page is indexed.

How JSON-LD Differs from Other Structured Data Formats

There are three ways to encode structured data: JSON-LD, Microdata, and RDFa. PrestaShop sometimes generates Microdata embedded in HTML — but Google officially recommends JSON-LD as the preferred format because it is easier to maintain.

| Format | Location | Editing Difficulty | Google Recommendation | | --------- | ------------------------- | ------------------ | --------------------- | | JSON-LD | Separate <script> block | Easy | ✅ Preferred | | Microdata | Intertwined with HTML | Difficult | ⚠️ Accepted | | RDFa | Attributes in HTML tags | Difficult | ⚠️ Accepted |

JSON-LD is a single, separate block. You edit it without touching the HTML structure — not hundreds of tags spread across the template.

Step-by-Step: How to Add Product Schema in PrestaShop

  1. Find the Product Template File

    In the PrestaShop panel, go to Design → Theme & Logo → Edit active theme. Look for the catalog/product.tpl file. If your hosting has a file manager (cPanel File Manager or Plesk), you can edit the file directly under the path:

    file path
    themes/{your-theme-name}/templates/catalog/product.tpl

    Before editing: download a copy of the file to your computer. 30 seconds that can save several hours.

    Bad
    I edit the file without a backup, because 'you can always undo it.'
    Better
    I download a copy of product.tpl locally. If something goes wrong, uploading the original file restores the store in 2 minutes.
  2. Prepare the JSON-LD Snippet

    Basic Product schema snippet — contains all fields required by Google:

    product-schema-static.html
    <script type="application/ld+json">
    {
    "@context": "https://schema.org/",
    "@type": "Product",
    "name": "PRODUCT NAME",
    "image": [
    "PRODUCT IMAGE URL"
    ],
    "description": "PRODUCT DESCRIPTION (max 5000 characters)",
    "brand": {
    "@type": "Brand",
    "name": "BRAND NAME"
    },
    "offers": {
    "@type": "Offer",
    "url": "PRODUCT PAGE URL",
    "priceCurrency": "PLN",
    "price": "NUMERIC PRICE",
    "priceValidUntil": "2026-12-31",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "https://schema.org/InStock"
    }
    }
    
    </script>

    This is a static version — manually filled. For a few products, this is sufficient.

    Shoe Store: for running shoes, enter the manufacturer's name in brand (e.g., "ASICS"), the full model name with size in name, and the current price in PLN in price.

    Supplement Store: in name, provide the full name with grammar ("Magnesium B6 forte 60 tablets"), and in description, the ingredients and dosage.

  3. Replace Static Values with Dynamic Ones (Optional)

    For more than 10 products, manually filling each snippet is too much work. PrestaShop uses the Smarty templating engine — allowing you to insert variables from the database.

    Dynamic version for PrestaShop 1.7/8.x:

    product-schema-dynamic.tpl
    <script type="application/ld+json">
    {
    "@context": "https://schema.org/",
    "@type": "Product",
    "name": "{$product.name|escape:'html':'UTF-8'}",
    "image": [
      "{$product.cover.bySize.large_default.url}"
    ],
    "description": "{$product.description_short|strip_tags|escape:'html':'UTF-8'}",
    "brand": {
      "@type": "Brand",
      "name": "{if $product.manufacturer_name}{$product.manufacturer_name|escape:'html':'UTF-8'}{else}Store{/if}"
    },
    "offers": {
    "@type": "Offer",
    "url": "{$product.url}",
      "priceCurrency": "{$currency.iso_code}",
    "price": "{$product.price_amount}",
    "priceValidUntil": "2026-12-31",
    "itemCondition": "https://schema.org/NewCondition",
    "availability": "{if $product.availability == 'available'}https://schema.org/InStock{else}https://schema.org/OutOfStock{/if}"
    }
    }
    
    </script>

    Don't know Smarty? Paste the static version for your main products. The dynamic version is useful if you want to show the file to a programmer or handle the entire catalog at once.

  4. Paste the Snippet in the Correct Place

    In the product.tpl file, find the closing </head> tag or {'{block name=\'head_end\'}'}. Paste the snippet just before this tag.

    product.tpl
    {_ JSON-LD Product schema — added 2026-05-27 _}
    
    <script type="application/ld+json">
    {...snippet...}
    </script>
    
    {/block}

    A comment with the date helps identify the change after a year when you don't remember what you edited.

    The snippet must be in the <head> section or directly in the <body> — not below the footer.

  5. Save the File and Check in Rich Results Test

    After saving product.tpl, open any product page in your store. Copy the URL and paste it into:

    url
    https://search.google.com/test/rich-results

    Click Test URL. Google will fetch the page and show the result:

    • ✅ Green checkmark: snippet is correct, qualifies for rich results
    • ❌ Error: list of missing or incorrect fields with a description of what to change

    If you see Missing field "offers" — check if the variable $product.price_amount returns a value. Some PrestaShop versions use $product.price instead of $product.price_amount.

  6. Check Additional Properties for Your Category

    For products where customers compare technical details, add category-specific fields:

    For Clothing and Footwear:

    schema-clothing.json
    "color": "Black",
    "size": "42",
    "material": "natural leather",
    "audience": {
    "@type": "PeopleAudience",
    "suggestedGender": "male"
    }

    For Supplements and Cosmetics:

    schema-supplements.json
    "additionalProperty": [
    {
      "@type": "PropertyValue",
      "name": "Weight",
      "value": "500g"
    }
    ]

    For Electronics:

    schema-electronics.json
    "model": "GX-500",
    "gtin13": "1234567890123"

    Do not add fields whose values you are unsure of — incorrect structured data is worse than no data.

  7. Monitor in Search Console Monthly

    The Rich Results Test checks one URL at a time. For regular monitoring, use Google Search Console — the Enhancements tab shows the status of structured data for the entire site, grouped by errors and warnings.

    A store with 50 products will see a list of problems there immediately — instead of checking each page individually.

Ready-to-Copy Snippets

Minimal Snippet (Static Version)

Fill in the CAPS_LOCK values from your store:

product-schema-minimal.html
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "FULL PRODUCT NAME",
"image": "https://yourstore.com/img/p/IMAGE-NAME.jpg",
"description": "SHORT PRODUCT DESCRIPTION",
"brand": {
  "@type": "Brand",
  "name": "BRAND"
},
"offers": {
  "@type": "Offer",
  "url": "https://yourstore.com/product/product-name",
  "priceCurrency": "PLN",
  "price": "199.00",
  "priceValidUntil": "2026-12-31",
  "itemCondition": "https://schema.org/NewCondition",
  "availability": "https://schema.org/InStock"
}
}
</script>

Snippet with Reviews (Aggregate Ratings)

Only if you have visible reviews on the product page:

product-schema-with-reviews.html
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "Product",
"name": "FULL PRODUCT NAME",
"image": "IMAGE URL",
"brand": { "@type": "Brand", "name": "BRAND" },
"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "4.5",
  "reviewCount": "23"
},
"offers": {
  "@type": "Offer",
  "priceCurrency": "PLN",
  "price": "199.00",
  "availability": "https://schema.org/InStock"
}
}
</script>

ratingValue and reviewCount must match the reviews visible on the page. If you don't have reviews — do not add aggregateRating. Google penalizes for fake ratings.

Product Schema Implementation Checklist for PrestaShop

Checklista · 0/18 done
  • Downloaded a copy of product.tpl before editing
  • JSON-LD snippet added to the <head> or <body> section of the product page
  • name field contains the full product name
  • image field is a working full URL to the product image (not a relative path)
  • description field is filled (min. 50 characters)
  • brand.name field contains the manufacturer or brand name
  • offers.price field is a number without a currency symbol ("199.00", not "199 zł")
  • offers.priceCurrency field is the ISO currency code ("PLN")
  • offers.availability field is the full scheme URL ("https://schema.org/InStock" or "https://schema.org/OutOfStock")
  • Product page URL in offers.url leads to the correct product
  • Test in Rich Results Test — no critical errors
  • No warnings for the "Product" section in Enhancements in Google Search Console
  • Structured data corresponds to what the user sees (price, availability, reviews)
  • Price in the snippet matches the price displayed on the page (including VAT if displayed that way)
  • priceValidUntil set to a future date
  • For product variants — snippet dynamically loaded for the active variant
  • For reviews: aggregateRating.reviewCount matches the number of reviews on the page
  • Reminder for monthly check in Search Console

7-Day Implementation Plan

  1. Choose 3 products with the most traffic. Check Google Analytics or Search Console to identify which product pages have the most sessions. Note their CTR — this is your baseline for measuring effects.

  2. Download product.tpl, make a copy. Prepare a static snippet for each of the 3 products — manually fill in prices, names, and image URLs.

  3. Paste the snippet into product.tpl. Save. Check each of the 3 products in Rich Results Test. Correct any errors.

  4. Log into Google Search Console. Check if the "Product" tab appears under Enhancements. If not — wait 48 hours, Google has not indexed the changes yet.

  5. If you have more than 10 products — convert the snippet to a dynamic version with Smarty variables or give the static version to a programmer with a request for automation.

  6. Fill in category-specific fields: color/size for clothing, gtin13 for electronics, additionalProperty for supplements.

  7. Check Search Console again. Set a reminder for 14 and 30 days. Paste your store URL into Audit AI — a full AI Readiness report with the status of all structured data, robots.txt, llms.txt, and compliance with AI agents.

Common Mistakes When Implementing Product Schema

Price with Currency Symbol in the price Field

Google expects a number, not text. A decimal comma is also an error — use a dot.

Bad
"price": "199,00 zł"
Better
"price": "199.00", "priceCurrency": "PLN"
availability Inconsistent with Visible Product Status

Google checks the consistency of structured data with page content. Inconsistency can result in rich results being disabled.

Bad
"availability": "https://schema.org/InStock" // product unavailable on page
Better
"availability": "{if $product.availability == 'available'}https://schema.org/InStock{else}https://schema.org/OutOfStock{/if}"
Image as a Relative Path

JSON-LD requires full URLs. A relative path does not work in a context parsed by external tools.

Bad
"image": "/img/p/12345.jpg"
Better
"image": "https://yourstore.com/img/p/12345.jpg"
Snippet Outside <head> or <body>

Some PrestaShop themes have non-standard template structures. A snippet pasted after the closing </html> will not be detected by the validator.

Always check in Rich Results Test — if the result is empty despite the snippet being pasted, it likely ended up outside the <body>.

How to Measure Effects After Implementation

Google needs to re-index the pages after the change — for active stores, this takes several hours to several days. Do not check the effects on the first day.

Signals worth tracking:

  • Rich Results in Search Console → Enhancements → Product: green status and number of valid items
  • CTR in Search Console: products with rich snippets may have a higher CTR — note the CTR for 3 key products today and compare after 30 days
  • Clicks from AI Search: traffic from OpenAI, Google Gemini, or Perplexity domains — visible in Google Analytics 4 with appropriate settings
  • Rich snippet in Google results: type site:yourstore.com product-name — does the result show stars and price?

Set a calendar reminder for 7 and 14 days after implementation. For stores with low organic traffic, changes may only be visible after 30 days.

Who This Solution Is Not Good For

You don't need to implement this if:

  • You sell only services, not physical products (schema.org has separate types: Service, LocalBusiness)
  • The store is closed to the public, B2B with login access — Google will not index these pages
  • You have fewer than 5 products and no scaling plans — the effort is disproportionate to the gain
  • Your PrestaShop theme is heavily modified and you don't have access to product.tpl — without template editing or a dedicated plugin, implementation is not possible

Wait with implementation if:

  • Prices or availability change several times a day without automatic updates — the risk of inconsistency between the snippet and the actual state is too high
  • The store is migrating to a new theme — implementing schema after stabilization will yield a more reliable result

Summary

Product schema JSON-LD in PrestaShop takes one afternoon: file copy, snippet paste, Rich Results Test. The effects are visible in two places — rich snippets in Google and better visibility in AI answers to shopping queries.

Start with three products with the most traffic. Check the Rich Results Test. Return to Search Console after a week. If you want to see a full AI Readiness report for your store — including structured data status, robots.txt, llms.txt, and compatibility with AI agents — run a free audit on Audit AI.

FAQ

Does Product schema work on PrestaShop 1.6?
Technically yes — JSON-LD is a regular <script> block; you can add it to any version. But PrestaShop 1.6 has been unsupported for years. The priority is first to migrate to 8.x, and only then implement schema.
Do I need a separate snippet for each product?
No, if you use the dynamic version with Smarty variables. One snippet in product.tpl handles all products — variables like {$product.name}, {$product.price_amount}, etc. are replaced automatically for each page.
What happens if the price in the snippet doesn't match the price on the page?
Google may deactivate rich results for your store and display a warning in Search Console. Inconsistency is detected by automatic scans comparing the snippet with the visible page content.
Can I use a plugin instead of editing product.tpl?
Yes. There are PrestaShop modules for managing structured data (e.g., SEO Expert, Rich Snippets by Presta-SEO). They cost €50–€150 and do not require file editing. For stores without access to templates, this is a faster solution.
How long will it take before Google shows rich snippets in results?
From several hours to 2–4 weeks, depending on the indexing frequency of your store. Active stores with high traffic are indexed more often. Check Search Console after 7 days — the Enhancements tab will show the status.

Sources

Check whether AI cites your site

AI-ready audit in 60 seconds: GEO, llms.txt, Schema, content structure. We tell you what to fix and in which order.

Run free audit
60 secondsNo signup50 checkpoints