"Custom sections replacing rich text editor on pages and products — SEO and structured data impact?"

Hi everyone,

I have been customizing my Shopify store by clearing the rich text editor content on pages and product pages, building the layout using custom theme sections instead, and hiding the default content area on the frontend.

For regular pages, I understand this does not break SEO as long as the content is visible on the frontend and the meta title and description are filled in manually under the Search engine listing section.

My main question is around product pages. Shopify themes automatically include structured data (microdata) in the default product sections, which powers rich snippets in Google search results such as price, availability, and reviews. If I hide the default product sections and replace them with fully custom sections, this structured data may be lost.

Has anyone done this successfully? How did you ensure the structured data was preserved in your custom sections? Any Liquid code examples or guidance would be greatly appreciated.

Thanks!

You’re right to think about structured data here. For regular pages, replacing the rich text editor content with custom sections generally isn’t an SEO issue as long as the content remains accesuble on the frontend and you maintain your metadata.

For product pages, however, it’s a bit different. Most sShopify themes output Product structured data (JSON-LD or microdata) through the main product template/section. If you completely remove or replace that section, you may also remove the structured data that Google uses for rich results such as price, availability, ratings, and reviews.

The safest approach is to inspect your theme and identify where the Product schema is being generated. In many modern Shopify themes, it’s output as JSON-LD in a separate snippet rather than directly in the visible product section. If that’s the case, you can keep the schema snippet intact while fully customizing the frontend layout.

After making changes, I’d recommend testing a few product URLs with Google’s rich results Test and checking the page source to confirm the Product schema is still present.

I’ve done custom product layouts before, and preserving the schema output separately from the visual layout has generally been the cleanest solution.

Hi @sharmavin97 ,
Yes, you can replace the default product section with custom sections without hurting SEO, but make sure the Product structured data (JSON-LD) is still being output.

Many Shopify themes generate schema separately from the product layout, so check whether your theme includes a schema snippet and keep it intact. The rich snippets (price, availability, reviews, etc.) depend on this structured data, not the visual design.

After implementation, test your product pages using Google’s Rich Results Test to confirm the Product schema is being detected correctly.

Hi @sharmavin97
You’ve got the right idea! :+1:

Regular pages: Custom sections are fine for SEO as long as content is visible and your meta title/description are set.

Product pages: Rich snippets (price, availability, reviews) come from the Product JSON-LD schema, not the layout — so custom sections won’t hurt, as long as the schema still outputs.

Quick check:

  1. Search your theme for application/ld+json. In most modern themes it’s in a separate snippet, not the product section.
  2. If separate → just keep it rendered.
  3. If it’s inside the section you’re removing → move that JSON-LD into your custom section.
  4. Test product URLs in Google’s Rich Results Test to confirm.

:warning: Only add review/rating schema if reviews actually show on the page.

Keeping schema separate from design is the cleanest approach — done this way many times.

Hey @sharmavin97 — great question, and you’re thinking about this the right way. Here’s a complete guide to handle this safely.


How Shopify structured data works

In most modern Shopify themes (Dawn and its descendants), the Product JSON-LD schema is output in a separate snippet, not embedded inside the visible product section. Look for a file like:

  • snippets/structured-data.liquid
    • snippets/product-structured-data.liquid
      • or a <script type=”application/ld+json”> block inside sections/main-product.liquid
    • Open your theme code and search for "@type”: “Product” or application/ld+json — that will show you exactly where it lives.

The safe approach: Separate schema from layout

The key principle is to decouple the structured data output from the visual layout. Here’s how:

Step 1 — Extract the schema into its own snippet

If the JSON-LD is currently inside your default product section, cut it out and place it in a dedicated snippet, e.g. snippets/product-schema.liquid:slight_smile:

liquid
<script type="application/ld+json">
{
  "@context": "https://schema.org/",
  "@type": "Product",
  "name": {{ product.title | json }},
  "url": {{ canonical_url | json }},
  "description": {{ product.description | strip_html | json }},
  "image": [
    {% for image in product.images %}
      {{ image | image_url: width: 1200 | prepend: 'https:' | json }}{% unless forloop.last %},{% endunless %}
    {% endfor %}
  ],
  "brand": {
    "@type": "Brand",
    "name": {{ product.vendor | json }}
  },
  "sku": {{ product.selected_or_first_available_variant.sku | json }},
  "offers": {
    "@type": "Offer",
    "url": {{ canonical_url | json }},
    "priceCurrency": {{ cart.currency.iso_code | json }},
    "price": {{ product.selected_or_first_available_variant.price | divided_by: 100.0 | json }},
    "availability": {% if product.selected_or_first_available_variant.available %}"https://schema.org/InStock"{% else %}"https://schema.org/OutOfStock"{% endif %},
    "seller": {
      "@type": "Organization",
      "name": {{ shop.name | json }}
    }
  }
}
</script>
```

**Step 2 — Include it in your theme layout**

In your `layout/theme.liquid`, include this snippet inside the `<head>` tag or just before `</body>` on product pages:

```liquid
{% if template == 'product' %}
  {% render 'product-schema' %}
{% endif %}
```

This way, **no matter what sections you add, remove, or replace** on the product template, the structured data is always rendered independently.

---

**For reviews / ratings (if applicable)**

If you use a reviews app (like Yotpo, Judge.me, Loox, etc.), they typically inject their own `aggregateRating` block automatically. Check their documentation before adding it manually to avoid duplicates.

---

**For regular pages**

You're correct — as long as the content is rendered in the HTML (even inside custom sections) and your meta title/description are set, there's no SEO risk. Just make sure content isn't hidden via `display: none` or rendered only via JS after page load, as Googlebot may not always execute JavaScript reliably.

---

**Testing checklist**

After making your changes:
1. **Google Rich Results Test** — https://search.google.com/test/rich-results — paste your product URL and confirm Product schema is detected.
2. **View Page Source** (Ctrl+U) — search for `application/ld+json` to confirm the schema block is present in raw HTML.
3. **Google Search Console** → Enhancements → Shopping — monitor for any structured data errors after deploying.

---

**TL;DR**

- Find where `"@type": "Product"` lives in your theme code.
- Move it to a dedicated snippet (`snippets/product-schema.liquid`).
- Render it conditionally from `layout/theme.liquid`.
- Then freely customize your product section layout without any SEO risk.

Hope this helps! Feel free to share your theme name if you need more specific guidance.