Schema.org Markup
naturespath.com · Full-site SEO audit · April 16, 2026
Schema is the single lowest-scoring dimension in the audit. The site implements roughly 10% of the already-written blueprint. Every page ships a malformed Organization block with http:// context and an HTML-entity name. Product pages ship three conflicting JSON-LD blocks (Shopify + Whisk + Okendo) with no shared @id references. Zero Recipe schema across 551 recipe posts. Zero BlogPosting JSON-LD across 1,227 blog posts. Zero of the four Google Merchant Listing required fields on any product. The gap is deployment, not design.
The deployment shape below is a Nature’s Path-specific Liquid snippet library — 10 snippets/dbc-schema-*.liquid files that hard-code brand, founder, certification, return policy, shipping, and facility values rather than accepting them as parameters. The theme includes snippets; snippets hold the source of truth. Every checklist item below either builds one of these snippets or wires it into a template.
Score Rationale
What this section shows. The weighted score breakdown across six schema dimensions: types present vs. required, Organization completeness, Product / Merchant Listing compliance, content schema (Recipe, BlogPosting), technical correctness, and missing types.
Schema is the cheapest lift with the highest E-E-A-T, AI-citation, and Shopping-eligibility payoff on the site. The blueprint is already written. The work is scaffolding and deploying the 10 Liquid snippets, not designing the schema. Every 10 points on this dimension trace to a specific snippet landing in production.
How to read the findings. The lowest-scoring rows (Content schema 0/15, Missing types 0/10, Organization completeness 2/20) are the greenfield builds. The Merchant Listing row (3/20) blocks Google Shopping eligibility. The Notes column explains what each sub-score is measuring.
| Dimension | Weight | Score | Notes |
|---|---|---|---|
| Schema types present vs. required | 25 | 6/25 | Only Organization + WebSite sitewide; Product present but broken |
| Organization completeness | 20 | 2/20 | 1 of 11 required fields populated |
| Product / Merchant Listing compliance | 20 | 3/20 | Duplicate blocks, all 4 Merchant Listing fields missing |
| Content schema (Recipe, BlogPosting) | 15 | 0/15 | Recipe entirely absent; BlogPosting Microdata only, incomplete |
| Technical correctness | 10 | 4/10 | http:// throughout, relative @ids, HTML entities in name |
| Missing types (Breadcrumb, Collection, AboutPage) | 10 | 0/10 | All absent |
| Total | 100 | 22/100 | Prior 38. Regression driven by tighter validation (Merchant Listings scored, Microdata BlogPosting not counted). |
Current State vs. Blueprint
The blueprint specifies a complete @graph with Organization, WebSite, Person entities (4), Brand entities (8), Product (consolidated), Recipe, BlogPosting, BreadcrumbList, CollectionPage, AboutPage, and ContactPage. Every block is packaged as a Liquid snippet in the Snippet Library below. Below are current vs. target for the two highest-impact blocks.
@context: http://schema.org — should be https://name: Nature's Path — HTML entity not decodedsameAs: 4 of 8 array entries are empty strings (Twitter, TikTok, Threads, LinkedIn)logo: missingdescription: missingfoundingDate: missinglegalName: missingaddress: missing@id: missing — blocks cross-reference from page-level schemaOn
/pages/about: url renders as page URL, not canonical org URL
@graph pattern with @id: https://naturespath.com/#organization@context: https://schema.orgPopulated
logo, description, legalName, foundingDate, addressFull
sameAs array including Wikipedia (Q6980861), Wikidata, Crunchbase, LinkedIn, Facebook, Instagram, YouTube4 linked Person entities (Arran, Ratana, Arjan, Jyoti Stephens)
8 linked Brand entities (Nature’s Path, EnviroKidz, Love Crunch, Que Pasa, Qi’a, Flax Plus, Anita’s Organic Mill, Love Child Organics)
knowsAbout: organic food, ROA, USDA NOP, Non-GMO Project
@context http://schema.org/, relative @id, brand.name: "NaturesPath"Block B (Okendo Product):
https:// correct, but duplicates Whisk, no @id, brand.name: "NaturesPath"Block C (Organization): site-wide broken block
All 4 Google Merchant Listing fields absent:
hasMerchantReturnPolicy, shippingDetails, priceValidUntil, itemConditionnutrition missing. hasCertification missing. Brand name canonical mismatch.
Product with absolute @id referencing #organization and Brand entitybrand.name: "Nature’s Path" (canonical, with apostrophe)Preserves Okendo
aggregateRating (ratingValue, reviewCount)All 4 Merchant Listing fields populated via Shopify metafields
NutritionInformation nested (calories, protein, fiber, sugar)hasCertification: USDA Organic, Non-GMO Project Verified, B Corp3 image URLs (1:1, 4:3, 16:9) at full resolution
Okendo standalone block disabled
7 Critical Issues
What this section shows. Seven critical schema defects, each named with the page surface affected (sitewide, every PDP, 551 recipe posts, 1,227 blog posts, etc.), the specific Liquid template where the fix lands, and the Merchant Listing or E-E-A-T consequence of leaving it unfixed.
Critical items gate the payoff from everything else. Deploying the Snippet Library without first fixing the http:// context, the HTML-entity name, the duplicate product blocks, or the missing Merchant Listing fields will leave validators warning and Google Shopping listings still invisible. The seven items here are the sequence every subsequent schema-related win depends on.
How to read the findings. Each callout is self-contained: what’s broken, where it ships from, and what to replace it with. Cross-reference with the Implementation Checklist below using the schema-* task IDs. Every critical callout has a matching Critical-tagged checklist item.
@context, HTML entities in namehttp:// context, missing logo/description/foundingDate/legalName/address, and 4 empty sameAs slots all fail Google validation. Fix: deploy the blueprint @graph block in theme.liquid, replacing the current minimal block.
@id deduplicationsections/main-product.liquid; disable the Okendo standalone block.
brand.name renders as NaturesPath and LoveCrunch (no spaces, no apostrophes) on every product. These match no canonical reference — not Wikipedia, Wikidata, Google Knowledge Graph, or the Organization schema on the same page. Fix: Shopify product vendor bulk update + Product schema @id reference to Brand entity.
hasMerchantReturnPolicy, shippingDetails, priceValidUntil, itemCondition are absent from all product offers. Without these, products are ineligible for Google Shopping rich results and free Merchant Listings. Fix: implement per-offer properties as specified in blueprint.
BlogPosting Microdata (wrong type) and an Organization JSON-LD block (irrelevant). No cook time, ingredients, yield, or nutrition are parseable. Fix: Recipe JSON-LD in sections/article-template.liquid conditioned on article.blog.handle == 'recipes'.
author, ISO 8601 datePublished, publisher). No JSON-LD. Fix: BlogPosting JSON-LD in sections/article-template.liquid conditioned on non-recipe blog handles.
snippets/breadcrumbs.liquid as specified in blueprint.
Required Merchant Listing Fields (0/4 Present)
The 4 fields below are Google’s required baseline for a product to appear in the free Shopping carousel and earn rich Shopping results. Every Nature’s Path product is currently ineligible.
| Field | Status | Implementation |
|---|---|---|
offers.hasMerchantReturnPolicy | MISSING | Link to MerchantReturnPolicy entity (return days, method, fees) |
offers.shippingDetails | MISSING | Link to OfferShippingDetails (carrier, delivery time, fee, geo coverage) |
offers.priceValidUntil | MISSING | ISO 8601 date string — populate via Shopify metafield |
offers.itemCondition | MISSING | Constant https://schema.org/NewCondition for all food products |
Detected Schema Inventory by Page
What this section shows. The JSON-LD and Microdata types currently detected on 13 representative pages (home, 3 PDPs, 3 collections, 3 blog / recipe posts, and 3 content pages), with a per-page note on what’s present and what’s broken.
Per-page inventory is how coverage gaps turn into actionable Liquid edits. The blueprint’s 10 snippets each target a specific page surface (PDP, collection, article, about-page, contact-page, FAQ). Knowing which pages currently ship which types informs the deploy order: Organization-only pages are unblocked by the entity-graph snippet; duplicate-block PDPs need the Product consolidation work first; recipe posts wrongly typed as BlogPosting need article-template conditionals.
How to read the findings. Red cells mean the page is missing an expected type. Amber cells mean a type is present but malformed or duplicated. Green means the page passes. Use this as the QA checklist after each Implementation Checklist deploy to confirm the fix reached the intended page surface.
| Page | JSON-LD Types | Microdata |
|---|---|---|
/ | Organization, WebSite | None |
| Heritage Flakes PDP | Organization, ProductGroup, Product (duplicate) | None |
| Dark Choc & Red Berries PDP | Organization, ProductGroup, Product (duplicate) | None |
| Panda Puffs PDP | Organization, ProductGroup, Product (duplicate) | None |
/collections/granola | Organization only | None |
/collections/cereal | Organization only | None |
/collections/oatmeal | Organization only | None |
/blogs/posts/benefits-plant-based-protein | Organization only | BlogPosting (incomplete) |
/blogs/recipes/5-ingredient-granola | Organization only | BlogPosting (wrong type for recipe) |
/blogs/recipes/banana-overnight-oats | Organization only | BlogPosting (wrong type for recipe) |
/pages/about | Organization (url bug) | None |
/pages/our-history | Organization only | None |
/pages/anitas-organic-milling | Organization only | None |
High-Priority Issues
What this section shows. Six high-priority schema issues that sit below Critical but above cleanup: relative @id values, http:// availability constants, missing WebSite @id and publisher, absent CollectionPage across 60+ collections, missing NutritionInformation, and absent Person entities.
High-tier items unlock rich results and cross-block references the Critical items depend on. The @id cross-referencing makes the blueprint @graph pattern actually function. CollectionPage and NutritionInformation each open rich-result surfaces. Person entities lock in the Stephens family E-E-A-T and Knowledge Panel wiring the GEO audit relies on.
How to read the findings. Each card names the issue, the scope, and the Liquid file where the fix lands. Every card maps to a High-tagged task in the Implementation Checklist.
@id relativeHIGHAll @id values use paths (/products/heritage-flakes#product) not absolute URLs. Schema.org requires absolute for global identifiers.
availability uses http://HIGH"availability": "http://schema.org/InStock" — warning-level. Blueprint specifies https://.
@id + publisherHIGHCannot be cross-referenced by page-level schema (isPartOf). Organization is not declared as publisher.
No CollectionPage, no ItemList, no product list enumeration. Fix in sections/main-collection-product-grid.liquid.
No structured nutrition on any product. Missed rich-result opportunity and signal gap for AI/LLM food queries.
Blueprint specifies 4 Person entities (Stephens family) with Wikipedia sameAs. Strengthens E-E-A-T and Knowledge Panel. Entirely absent.
Technical Validation Notes
All generated JSON-LD in the blueprint passes the following checklist:
@context:https://schema.org(not http://)- All
@idvalues: absolute URLs - All dates: ISO 8601 format
- No placeholder text, no deprecated types (no HowTo, no SpecialAnnouncement, no FAQ on commercial pages)
- AggregateRating sourced from Okendo live review data — preserve existing
ratingValueandreviewCountin the consolidated Product block - Recipe
recipeInstructionsusesHowToStepsub-type (supported, distinct from the deprecated standalone HowTo rich result type)
Liquid Snippet Library
Rather than scatter JSON-LD across theme.liquid, sections/main-product.liquid, sections/article-template.liquid, and several page templates, every schema block lives in a dedicated snippet under a shared snippets/dbc-schema-*.liquid prefix. The theme only calls snippets; snippets hold the source of truth for Nature’s Path schema.
Each snippet is Nature’s Path-specific — brand list, founder entities, facility addresses, certifications, return policy, shipping terms, and customer service phone are hard-coded inside the snippet, not passed in as parameters. Only values that genuinely vary per page (product, article, collection, page, breadcrumbs) come from Liquid objects. This keeps the dev surface minimal and the blueprint single-source.
These Shopify metafield definitions do not exist in the Nature’s Path store yet. A Shopify developer must create each one in the Shopify admin before dbc-schema-product.liquid and dbc-schema-article.liquid will emit nutrition, certification, recipe, or rating data. Until the definitions exist and values are populated, those branches of the Liquid silently skip and schema validators will flag missing fields.
- Where to create
- Shopify admin → Settings → Custom data → Products (or Articles) → Add definition
- Read by
dbc-schema-product.liquid,dbc-schema-article.liquid- Not needed by
- Entity graph, breadcrumbs, collection, about-page, contact-page, FAQ, local-business, speakable (these are fully hard-coded)
- How to populate
- Most by hand in the Shopify admin per SKU / per article once definitions exist; Okendo rating metafields populate automatically from the Okendo Reviews app.
Product metafields — namespace nutrition
Nine fields populated per SKU from the back-of-package Nutrition Facts panel. dbc-schema-product.liquid emits a NutritionInformation block only when calories is non-blank.
Key Type Description Example ------------- ---------------- ----------------------------------- ----------------- serving_size single_line_text Serving size with unit 3/4 cup (32g) calories single_line_text Kilocalories per serving 120 calories fat single_line_text Total fat with unit 1g saturated_fat single_line_text Saturated fat with unit 0g carbohydrate single_line_text Total carbohydrates with unit 26g fiber single_line_text Dietary fiber with unit 5g sugar single_line_text Sugars with unit 5g protein single_line_text Protein with unit 5g sodium single_line_text Sodium with unit (mg preferred) 150mg
Product metafields — namespace certifications
Four boolean flags added on top of the USDA Organic + Non-GMO Project baseline that every NP product carries (which the snippet hard-codes). Flip true per SKU where the product earns the additional certification.
Key Type Description Default ----------- ------- ------------------------------------------- ------- roc boolean Regenerative Organic Certified false fair_trade boolean Fair Trade Certified (e.g. toaster pastries) false kosher boolean Kosher certified (OK / OU / Star-K / etc.) false gluten_free boolean Certified Gluten-Free by GFCO false
Product metafields — namespace okendo
Populated automatically by the Okendo Reviews app. If the Okendo app isn’t emitting these already, flip “Sync aggregate ratings to Shopify metafields” in the Okendo admin. No manual entry. The snippet emits aggregateRating only when rating_count is greater than zero.
Key Type Description ------------ -------------- ------------------------------------------- rating_value number_decimal Okendo aggregate rating (e.g. 4.5) rating_count number_integer Number of reviews aggregated
Article metafields — namespace recipe (recipes blog only)
Populated per recipe article by the content team alongside new or refreshed recipe posts. dbc-schema-article.liquid emits Recipe schema only when the article’s blog handle is recipes.
Key Type Description Example
------------ ---------------------- --------------------------------------- ---------------------
prep_time single_line_text ISO 8601 duration PT10M
cook_time single_line_text ISO 8601 duration PT25M
total_time single_line_text ISO 8601 duration PT35M
yield single_line_text Recipe yield string 4 servings
category single_line_text Course / meal type Breakfast
cuisine single_line_text Cuisine style; defaults to American American
diet list.single_line_text Diet flags rendered into suitableForDiet ["Vegetarian"]
(Vegetarian, Vegan, GlutenFree,
LowCalorie, LowSalt, Diabetic, etc.)
ingredients list.single_line_text One ingredient per entry ["2 tbsp olive oil"]
instructions list.multi_line_text One step per entry; emits as HowToStep ["Sauté onion...", ...]
serving_size single_line_text Populates nutrition.servingSize 1 cup
calories single_line_text Populates nutrition.calories 180 calories
protein single_line_text Populates nutrition.proteinContent 6g
fat single_line_text Populates nutrition.fatContent 4g
carbohydrate single_line_text Populates nutrition.carbohydrateContent 28g
fiber single_line_text Populates nutrition.fiberContent 3g
sugar single_line_text Populates nutrition.sugarContent 5g
video_url url Optional hero video URL (blank)
Article metafields — namespace post (non-recipe blog)
Key Type Description Default
------- ---------------- ---------------------------------------------- --------------
section single_line_text articleSection string (e.g. "Education", blog.title
"Sustainability", "Recipes").
Falls back to the blog's title when blank.
about json Optional array of Thing references with (blank)
Wikidata sameAs for topic tagging, e.g.
[{"@type":"Thing","name":"Organic food",
"sameAs":"https://www.wikidata.org/entity/Q11576"}]
Article metafields — namespace author
Key Type Description
----------- ---- ---------------------------------------------------------
profile_url url Optional URL to the author's profile page on the site.
If present, adds author.url to the emitted Person entity.
Setup workflow
Three valid paths:
- Deep Blue + AI scripted (recommended, ~30 seconds to run): Deep Blue runs a Node script against NP’s Shopify Admin API that creates all ~30 definitions via
metafieldDefinitionCreateand pre-populates every value we can derive without human input — the USDA Organic + Non-GMO baseline on every SKU, nutrition data from NP’s back-of-package data export (once NP provides it as CSV), Okendo ratings where Okendo already syncs. Per-SKU certifications (Fair Trade, ROC, Kosher, Gluten-Free) and per-article recipe fields are flagged for human review and filled in by the NP content team. Requires one-time setup from NP: a custom-app access token withwrite_products+write_articlesscopes, and the nutrition data CSV. - Shopify admin UI (manual, ~30 clicks): Settings → Custom data → Products, click Add definition. Namespace and key go in the “Namespace and key” field as
nutrition.serving_sizeformat. Type from the dropdown. Repeat for all 23 Product definitions. Then Articles → Add definition for the 16 Article definitions. Values still need per-SKU population afterward. - Admin API GraphQL (scripted, no auto-population): A one-off Node or Ruby script running
metafieldDefinitionCreateonce per row in the tables above. Owner type isPRODUCTorARTICLE; namespace isnutrition/certifications/okendo/recipe/post/author; key is the column above. Definitions only; values still hand-entered.
Across all three paths, recipe metafields get populated alongside new recipe posts as part of the standard content workflow — the schema snippet is additive and recipes already in the backlog continue to render their existing HTML body; Recipe schema just starts appearing on posts where the metafields have been filled.
Renders the full Nature’s Path entity graph in a single <script type="application/ld+json"> block. Included once from theme.liquid <head>. Every other page-level snippet cross-references entities declared here via @id.
- Included in
theme.liquid<head>- Parameters
- None — every value is hard-coded inside the snippet.
- Render frequency
- Once per page load, on every page of the site.
Hard-Coded
- Organization:
nameNature’s Path,legalNameNature’s Path Foods Inc.,foundingDate1985, Richmond BC address (9100 Van Horne Way, V6X 1W3), NAICS 311230, ISIC 1061 contactPoint: +1-866-880-7284 (customer service, US/CA, EN/FR); wholesale@naturespath.comareaServed: US, CA, GB, MX- 4 Person entities (Arran, Ratana, Arjan, Jyoti Stephens) with Wikipedia
sameAs, jobTitle, award, alumniOf, worksFor/spouse/parent cross-refs - 8 Brand entities with stable
@idvalues andparentOrganizationpointers - 4 subOrganization facilities (Blaine WA, Sussex WI, Chilliwack BC, Mississauga ON)
- 14
knowsAboutWikidata Thing references - 9
hasCredentialentries (B Corp, USDA Organic, COR, Non-GMO Project, ROC, Zero Waste TRUE, Climate Smart, FSC) - 4
memberOfentries (OTA, COTA, 1% for the Planet, SFTA) - 8
awardstrings (2017–2026) - 11
sameAsURLs (Wikipedia, Wikidata Q6980861, Crunchbase, LinkedIn, Twitter/X, Facebook, Instagram, Pinterest, YouTube, TikTok, Threads)
From Liquid
- None.
Drop-in Liquid
{%- comment -%}
dbc-schema-entity-graph.liquid
Full Nature's Path entity graph.
Included once from theme.liquid <head>.
Zero parameters — every value hard-coded.
{%- endcomment -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "https://naturespath.com/#organization",
"name": "Nature's Path",
"alternateName": ["Nature's Path Organic Foods", "Nature's Path Foods"],
"legalName": "Nature's Path Foods Inc.",
"url": "https://naturespath.com/",
"logo": {
"@type": "ImageObject",
"@id": "https://naturespath.com/#logo",
"url": "https://naturespath.com/cdn/shop/files/natures-path-logo.png",
"contentUrl": "https://naturespath.com/cdn/shop/files/natures-path-logo.png",
"caption": "Nature's Path"
},
"image": { "@id": "https://naturespath.com/#logo" },
"description": "North America's largest certified organic breakfast and snack food company. Family-owned since 1985. Headquartered in Richmond, BC, Canada. Producers of organic cereal, granola, oatmeal, waffles, toaster pastries, tortilla chips, and stone-milled flour under seven brands.",
"foundingDate": "1985",
"foundingLocation": {
"@type": "Place",
"name": "Vancouver, British Columbia, Canada",
"address": {
"@type": "PostalAddress",
"addressLocality": "Vancouver",
"addressRegion": "BC",
"addressCountry": "CA"
}
},
"founder": [
{ "@id": "https://naturespath.com/#arran-stephens" },
{ "@id": "https://naturespath.com/#ratana-stephens" }
],
"employee": [
{ "@id": "https://naturespath.com/#arjan-stephens" },
{ "@id": "https://naturespath.com/#jyoti-stephens" }
],
"numberOfEmployees": {
"@type": "QuantitativeValue",
"minValue": 501,
"maxValue": 1000
},
"address": {
"@type": "PostalAddress",
"streetAddress": "9100 Van Horne Way",
"addressLocality": "Richmond",
"addressRegion": "BC",
"postalCode": "V6X 1W3",
"addressCountry": "CA"
},
"contactPoint": [
{
"@type": "ContactPoint",
"telephone": "+1-866-880-7284",
"contactType": "customer service",
"areaServed": ["US", "CA"],
"availableLanguage": ["English", "French"]
},
{
"@type": "ContactPoint",
"email": "wholesale@naturespath.com",
"contactType": "wholesale",
"areaServed": ["US", "CA"]
}
],
"areaServed": [
{ "@type": "Country", "name": "United States" },
{ "@type": "Country", "name": "Canada" },
{ "@type": "Country", "name": "United Kingdom" },
{ "@type": "Country", "name": "Mexico" }
],
"naics": "311230",
"isicV4": "1061",
"brand": [
{ "@id": "https://naturespath.com/#brand-natures-path" },
{ "@id": "https://naturespath.com/#brand-envirokidz" },
{ "@id": "https://naturespath.com/#brand-love-crunch" },
{ "@id": "https://naturespath.com/#brand-que-pasa" },
{ "@id": "https://naturespath.com/#brand-qia" },
{ "@id": "https://naturespath.com/#brand-flax-plus" },
{ "@id": "https://naturespath.com/#brand-anitas-organic-mill" },
{ "@id": "https://naturespath.com/#brand-love-child-organics" }
],
"subOrganization": [
{
"@type": "Organization",
"@id": "https://naturespath.com/#facility-blaine",
"name": "Nature's Path Foods USA Inc.",
"address": {
"@type": "PostalAddress",
"streetAddress": "#275-250 H Street",
"addressLocality": "Blaine",
"addressRegion": "WA",
"postalCode": "98230",
"addressCountry": "US"
},
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Organization",
"@id": "https://naturespath.com/#facility-sussex",
"name": "Nature's Path Foods USA II LLC",
"address": {
"@type": "PostalAddress",
"addressLocality": "Sussex",
"addressRegion": "WI",
"addressCountry": "US"
},
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Organization",
"@id": "https://naturespath.com/#anitas-organic-mill-org",
"name": "Anita's Organic Mill",
"address": {
"@type": "PostalAddress",
"addressLocality": "Chilliwack",
"addressRegion": "BC",
"addressCountry": "CA"
},
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Organization",
"@id": "https://naturespath.com/#love-child-organics-org",
"name": "Love Child Organics",
"address": {
"@type": "PostalAddress",
"addressLocality": "Mississauga",
"addressRegion": "ON",
"addressCountry": "CA"
},
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
}
],
"knowsAbout": [
{ "@type": "Thing", "name": "Organic farming", "sameAs": "https://www.wikidata.org/entity/Q190912" },
{ "@type": "Thing", "name": "Regenerative agriculture", "sameAs": "https://www.wikidata.org/entity/Q3560378" },
{ "@type": "Thing", "name": "Breakfast cereal", "sameAs": "https://www.wikidata.org/entity/Q187456" },
{ "@type": "Thing", "name": "Granola", "sameAs": "https://www.wikidata.org/entity/Q188829" },
{ "@type": "Thing", "name": "Oatmeal", "sameAs": "https://www.wikidata.org/entity/Q331769" },
{ "@type": "Thing", "name": "Tortilla chip", "sameAs": "https://www.wikidata.org/entity/Q1435988" },
{ "@type": "Thing", "name": "Genetically modified food", "sameAs": "https://www.wikidata.org/entity/Q183786" },
{ "@type": "Thing", "name": "Fair trade", "sameAs": "https://www.wikidata.org/entity/Q188485" },
{ "@type": "Thing", "name": "Stone milling", "sameAs": "https://en.wikipedia.org/wiki/Stone_mill" },
{ "@type": "Thing", "name": "Organic certification", "sameAs": "https://www.wikidata.org/entity/Q1138572" },
{ "@type": "Thing", "name": "Sustainable food system", "sameAs": "https://www.wikidata.org/entity/Q11042228" },
{ "@type": "Thing", "name": "Zero waste", "sameAs": "https://www.wikidata.org/entity/Q1729176" },
{ "@type": "Thing", "name": "USDA National Organic Program","sameAs": "https://en.wikipedia.org/wiki/National_Organic_Program" },
{ "@type": "Thing", "name": "Vegetarianism", "sameAs": "https://www.wikidata.org/entity/Q83364" }
],
"memberOf": [
{ "@type": "Organization", "name": "Organic Trade Association", "sameAs": "https://en.wikipedia.org/wiki/Organic_Trade_Association" },
{ "@type": "Organization", "name": "Canada Organic Trade Association", "url": "https://canada-organic.ca/" },
{ "@type": "Organization", "name": "1% for the Planet", "sameAs": "https://en.wikipedia.org/wiki/1%25_for_the_Planet" },
{ "@type": "Organization", "name": "Sustainable Food Trade Association" }
],
"hasCredential": [
{
"@type": "EducationalOccupationalCredential",
"name": "B Corporation Certification",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "B Lab", "sameAs": "https://en.wikipedia.org/wiki/B_Lab" }
},
{
"@type": "EducationalOccupationalCredential",
"name": "USDA Organic",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "United States Department of Agriculture", "sameAs": "https://en.wikipedia.org/wiki/United_States_Department_of_Agriculture" }
},
{
"@type": "EducationalOccupationalCredential",
"name": "Canada Organic Regime (COR)",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "Canadian Food Inspection Agency", "sameAs": "https://en.wikipedia.org/wiki/Canadian_Food_Inspection_Agency" }
},
{
"@type": "EducationalOccupationalCredential",
"name": "Non-GMO Project Verified",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "Non-GMO Project", "sameAs": "https://en.wikipedia.org/wiki/Non-GMO_Project" }
},
{
"@type": "EducationalOccupationalCredential",
"name": "Regenerative Organic Certified",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "Regenerative Organic Alliance", "url": "https://regenorganic.org/" }
},
{
"@type": "EducationalOccupationalCredential",
"name": "Zero Waste Certified (TRUE)",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "Green Business Certification Inc.", "url": "https://true.gbci.org/" }
},
{
"@type": "EducationalOccupationalCredential",
"name": "Climate Smart Business",
"credentialCategory": "Certification"
},
{
"@type": "EducationalOccupationalCredential",
"name": "Forest Stewardship Council",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "Forest Stewardship Council", "sameAs": "https://en.wikipedia.org/wiki/Forest_Stewardship_Council" }
},
{
"@type": "EducationalOccupationalCredential",
"name": "Fair Trade Certified",
"credentialCategory": "Certification",
"recognizedBy": { "@type": "Organization", "name": "Fair Trade USA", "sameAs": "https://en.wikipedia.org/wiki/Fair_Trade_USA" }
}
],
"award": [
"Climate Collaborative Collective Action Leadership Award (2026)",
"One Step Closer Packaging Innovation in Supply Chain Award (2026)",
"BC's Top Employers Award (2025, 2026)",
"Canada's Greenest Employers Award (2025)",
"Canadian Organic Trade Association J.E.D.I. Leader of the Year (2025)",
"Canadian Grocer Sustainability Award (2024)",
"Walmart Giga-Guru Supplier Recognition (2024, 2025)",
"Rabobank Leader in Sustainability Award (2017)"
],
"sameAs": [
"https://en.wikipedia.org/wiki/Nature%27s_Path",
"https://www.wikidata.org/wiki/Q6980861",
"https://www.crunchbase.com/organization/nature-s-path",
"https://ca.linkedin.com/company/nature's-path-foods",
"https://twitter.com/naturespath",
"https://www.facebook.com/naturespath/",
"https://www.instagram.com/naturespathorganic/",
"https://www.pinterest.com/naturespath/",
"https://www.youtube.com/user/NaturesPathFoods",
"https://www.tiktok.com/@naturespathorganic",
"https://www.threads.net/@naturespathorganic"
]
},
{
"@type": "WebSite",
"@id": "https://naturespath.com/#website",
"url": "https://naturespath.com/",
"name": "Nature's Path",
"description": "Organic breakfast and snack foods. Cereal, granola, oatmeal, toaster pastries, waffles, tortilla chips, and stone-milled flour from a family-owned company since 1985.",
"publisher": { "@id": "https://naturespath.com/#organization" },
"inLanguage": ["en-US", "en-CA", "fr-CA", "en-GB", "en-MX", "es-MX"],
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://naturespath.com/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
},
{
"@type": "Person",
"@id": "https://naturespath.com/#arran-stephens",
"name": "Arran Stephens",
"givenName": "Arran",
"familyName": "Stephens",
"jobTitle": "Co-Founder, Chair of the Board",
"description": "Co-founder of Nature's Path Foods (1985). Canadian organic food pioneer. Author of multiple books including Journey to the Luminous (1999) and The Compassionate Diet (2011). Recipient of the Order of British Columbia (2021), Honorary Doctorate from University of Victoria (2021), Honorary Doctorate from University of British Columbia (2024), and the Rodale Institute Organic Pioneer Award (2018).",
"birthPlace": { "@type": "Place", "name": "Vancouver Island, British Columbia, Canada" },
"nationality": { "@type": "Country", "name": "Canada" },
"worksFor": { "@id": "https://naturespath.com/#organization" },
"spouse": { "@id": "https://naturespath.com/#ratana-stephens" },
"award": [
"Order of British Columbia (2021)",
"Rodale Institute Organic Pioneer Award (2018)",
"Honorary Doctorate, University of Victoria (2021)",
"Honorary Doctorate, University of British Columbia (2024)",
"Canadian Health Food Association Lifetime Achievement Award (1997)",
"Simon Fraser University President's Distinguished Community Leadership Award (2024)"
],
"sameAs": ["https://en.wikipedia.org/wiki/Arran_Stephens"]
},
{
"@type": "Person",
"@id": "https://naturespath.com/#ratana-stephens",
"name": "Ratana Stephens",
"givenName": "Ratana",
"familyName": "Stephens",
"jobTitle": "Co-Founder, Board Member",
"description": "Co-founder of Nature's Path Foods (1985). Co-founder of Lifestream Natural Foods (1971). Continues to serve as a board member and is recognized for decades of philanthropic work alongside her husband Arran Stephens.",
"worksFor": { "@id": "https://naturespath.com/#organization" },
"spouse": { "@id": "https://naturespath.com/#arran-stephens" },
"award": ["Simon Fraser University President's Distinguished Community Leadership Award (2024)"],
"sameAs": ["https://en.wikipedia.org/wiki/Ratana_Stephens"]
},
{
"@type": "Person",
"@id": "https://naturespath.com/#arjan-stephens",
"name": "Arjan Stephens",
"givenName": "Arjan",
"familyName": "Stephens",
"jobTitle": "President",
"description": "President of Nature's Path Foods since August 2023. Son of co-founders Arran and Ratana Stephens. Previously served as President of Que Pasa Mexican Foods. Has personally led 100+ product launches since 2011, including Love Crunch, Qi'a, and Nature's Path Sunrise. Active public spokesperson on regenerative organic agriculture.",
"alumniOf": { "@type": "CollegeOrUniversity", "name": "Queen's University", "sameAs": "https://en.wikipedia.org/wiki/Queen%27s_University" },
"worksFor": { "@id": "https://naturespath.com/#organization" },
"parent": [
{ "@id": "https://naturespath.com/#arran-stephens" },
{ "@id": "https://naturespath.com/#ratana-stephens" }
],
"knowsAbout": [
"Regenerative organic agriculture",
"Organic food product development",
"Independent CPG brand strategy"
]
},
{
"@type": "Person",
"@id": "https://naturespath.com/#jyoti-stephens",
"name": "Jyoti Stephens",
"givenName": "Jyoti",
"familyName": "Stephens",
"jobTitle": "Vice President, Mission and Strategy",
"description": "Vice President of Mission and Strategy at Nature's Path Foods. Daughter of co-founders Arran and Ratana Stephens. Leads the company's sustainability strategy, ethical sourcing, energy efficiency, waste reduction, and packaging programs. Under her leadership all three Nature's Path manufacturing facilities earned Zero Waste certification. Clean50 honouree. Serves on the Board of Governors of the University of Victoria.",
"alumniOf": [
{ "@type": "CollegeOrUniversity", "name": "University of Victoria", "sameAs": "https://en.wikipedia.org/wiki/University_of_Victoria" },
{ "@type": "CollegeOrUniversity", "name": "Presidio Graduate School", "sameAs": "https://en.wikipedia.org/wiki/Presidio_Graduate_School" }
],
"hasCredential": {
"@type": "EducationalOccupationalCredential",
"name": "MBA in Sustainable Food and Agriculture",
"credentialCategory": "degree"
},
"worksFor": { "@id": "https://naturespath.com/#organization" },
"parent": [
{ "@id": "https://naturespath.com/#arran-stephens" },
{ "@id": "https://naturespath.com/#ratana-stephens" }
],
"memberOf": { "@type": "Organization", "name": "University of Victoria Board of Governors" },
"award": [
"Organic Trade Association Social Impact Leadership Award (2024)",
"Clean50 Honouree"
],
"knowsAbout": [
"Sustainable food systems",
"Zero waste manufacturing",
"Ethical sourcing",
"Regenerative organic agriculture"
]
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-natures-path",
"name": "Nature's Path",
"url": "https://naturespath.com/pages/natures-path",
"description": "Parent brand. Certified organic adult breakfast cereals, granolas, oatmeal, waffles, and toaster pastries.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-envirokidz",
"name": "EnviroKidz",
"url": "https://naturespath.com/pages/envirokidz",
"description": "Organic kids' cereals, bars, and waffles with animal-character branding and a conservation mission. 1% for the Planet member since launch in 2000.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-love-crunch",
"name": "Love Crunch",
"url": "https://naturespath.com/pages/love-crunch",
"description": "Premium indulgent organic granola, launched 2011. Includes the Bite4Bite food-bank donation model.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-que-pasa",
"name": "Que Pasa",
"url": "https://naturespath.com/pages/que-pasa",
"description": "Organic stone-ground tortilla chips and salsas. Acquired by Nature's Path in 2013.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-qia",
"name": "Qi'a",
"description": "Superfood product line emphasizing chia, hemp, buckwheat, and ancient grains. Hot oatmeal cups, cold cereal, and superfood bars.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-flax-plus",
"name": "Flax Plus",
"description": "Sub-line of Nature's Path cereals built around flax seed as the hero ingredient. Includes Flax Plus Flakes, Flax Plus Pumpkin Raisin Crunch, and Flax Plus Granola.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-anitas-organic-mill",
"name": "Anita's Organic Mill",
"alternateName": "Anita's Organic Flour",
"url": "https://naturespath.com/pages/anitas-organic-milling",
"description": "Stone-milled organic flour and baking products from Chilliwack, BC. Established 1997, acquired by Nature's Path in November 2021.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
},
{
"@type": "Brand",
"@id": "https://naturespath.com/#brand-love-child-organics",
"name": "Love Child Organics",
"description": "Organic baby food pouches, toddler snacks, and children's functional snacks. Founded 2011 in Mississauga, Ontario. Acquired by Nature's Path in June 2023.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" }
}
]
}
</script>
Renders a single consolidated Product JSON-LD on every PDP. Replaces the three conflicting blocks currently emitted (Shopify default Product + Whisk ProductGroup + Okendo auto-injected Product). Every Google Merchant Listing required field is hard-coded here so PDPs gain Shopping eligibility the moment the snippet ships.
- Included in
sections/main-product.liquid- Parameters
- Implicit
productfrom enclosing Liquid context. - Render frequency
- Once per PDP.
Hard-Coded
hasMerchantReturnPolicy: 30-day, free return by mail, US + CAshippingDetails: 1–2 day handling, 3–7 day transit, free over $59 USDitemCondition:https://schema.org/NewConditionpriceValidUntil: computed as current-year-12-31- Baseline
hasCertification: USDA Organic + Non-GMO Project Verified (on every NP product) - Vendor → Brand
@idcase/when lookup for all 8 brands; falls back to#brand-natures-path manufacturerandoffers.seller→#organization- Product
@id={shop.url}{product.url}#product, offer@idappends#offer
From Liquid
product.title,product.description,product.featured_image,product.url- Selected variant:
sku,barcode(GTIN-13),price,available product.metafields.nutrition.*— calories, fat, carb, fiber, sugar, protein, sodium, servingSize (emitsNutritionInformationwhen present)product.metafields.certifications.roc— adds Regenerative Organic Certified when truthyproduct.metafields.okendo.rating_value/.rating_count— emitsaggregateRatingwhen count > 0
Drop-in Liquid
{%- comment -%}
dbc-schema-product.liquid
Consolidated Product JSON-LD. Include from sections/main-product.liquid.
Delete the Whisk-inline ProductGroup and Shopify default Product blocks
in the same commit; disable Okendo's auto-injected Product schema via
app settings so the aggregateRating here is the only one emitted.
{%- endcomment -%}
{%- liquid
case product.vendor
when "Nature's Path", "NaturesPath"
assign brand_id = "https://naturespath.com/#brand-natures-path"
when "EnviroKidz"
assign brand_id = "https://naturespath.com/#brand-envirokidz"
when "Love Crunch", "LoveCrunch"
assign brand_id = "https://naturespath.com/#brand-love-crunch"
when "Que Pasa"
assign brand_id = "https://naturespath.com/#brand-que-pasa"
when "Qi'a"
assign brand_id = "https://naturespath.com/#brand-qia"
when "Flax Plus"
assign brand_id = "https://naturespath.com/#brand-flax-plus"
when "Anita's Organic Mill"
assign brand_id = "https://naturespath.com/#brand-anitas-organic-mill"
when "Love Child Organics"
assign brand_id = "https://naturespath.com/#brand-love-child-organics"
else
assign brand_id = "https://naturespath.com/#brand-natures-path"
endcase
assign variant = product.selected_or_first_available_variant
assign price_year = "now" | date: "%Y"
assign n = product.metafields.nutrition
assign ok = product.metafields.okendo
assign certs = product.metafields.certifications
-%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "{{ shop.url }}{{ product.url }}#product",
"name": {{ product.title | json }},
"description": {{ product.description | strip_html | json }},
"image": [
{%- for img in product.images limit: 5 -%}
"{{ img | img_url: 'master' | prepend: 'https:' }}"{%- unless forloop.last -%},{%- endunless -%}
{%- endfor -%}
],
"sku": {{ variant.sku | json }},
"gtin13": {{ variant.barcode | json }},
{%- if product.type != blank -%}
"category": {{ product.type | json }},
{%- endif -%}
"brand": { "@id": "{{ brand_id }}" },
"manufacturer": { "@id": "https://naturespath.com/#organization" },
"isRelatedTo": { "@id": "https://naturespath.com/#organization" },
"hasCertification": [
{ "@type": "Certification", "name": "USDA Organic",
"issuedBy": { "@type": "Organization", "name": "United States Department of Agriculture" } },
{ "@type": "Certification", "name": "Non-GMO Project Verified",
"issuedBy": { "@type": "Organization", "name": "Non-GMO Project" } }
{%- if certs.roc -%}
, { "@type": "Certification", "name": "Regenerative Organic Certified",
"issuedBy": { "@type": "Organization", "name": "Regenerative Organic Alliance" } }
{%- endif -%}
{%- if certs.fair_trade -%}
, { "@type": "Certification", "name": "Fair Trade Certified",
"issuedBy": { "@type": "Organization", "name": "Fair Trade USA" } }
{%- endif -%}
{%- if certs.kosher -%}
, { "@type": "Certification", "name": "Kosher Certified" }
{%- endif -%}
{%- if certs.gluten_free -%}
, { "@type": "Certification", "name": "Certified Gluten-Free",
"issuedBy": { "@type": "Organization", "name": "Gluten-Free Certification Organization" } }
{%- endif -%}
],
{%- if n.calories != blank -%}
"nutrition": {
"@type": "NutritionInformation",
"servingSize": {{ n.serving_size | json }},
"calories": {{ n.calories | json }},
"fatContent": {{ n.fat | json }},
"saturatedFatContent": {{ n.saturated_fat| json }},
"carbohydrateContent": {{ n.carbohydrate | json }},
"fiberContent": {{ n.fiber | json }},
"sugarContent": {{ n.sugar | json }},
"proteinContent": {{ n.protein | json }},
"sodiumContent": {{ n.sodium | json }}
},
{%- endif -%}
{%- if ok.rating_count and ok.rating_count > 0 -%}
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": {{ ok.rating_value | json }},
"reviewCount": {{ ok.rating_count | json }},
"bestRating": "5",
"worstRating": "1"
},
{%- endif -%}
"offers": {
"@type": "Offer",
"@id": "{{ shop.url }}{{ product.url }}#offer",
"url": "{{ shop.url }}{{ product.url }}",
"price": {{ product.price | money_without_currency | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"priceValidUntil": "{{ price_year }}-12-31",
"itemCondition": "https://schema.org/NewCondition",
"availability": "{% if product.available %}https://schema.org/InStock{% else %}https://schema.org/OutOfStock{% endif %}",
"seller": { "@id": "https://naturespath.com/#organization" },
"hasMerchantReturnPolicy": {
"@type": "MerchantReturnPolicy",
"applicableCountry": ["US", "CA"],
"returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
"merchantReturnDays": 30,
"returnMethod": "https://schema.org/ReturnByMail",
"returnFees": "https://schema.org/FreeReturn"
},
"shippingDetails": {
"@type": "OfferShippingDetails",
"shippingRate": { "@type": "MonetaryAmount", "value": "0", "currency": "USD" },
"shippingDestination": { "@type": "DefinedRegion", "addressCountry": "US" },
"deliveryTime": {
"@type": "ShippingDeliveryTime",
"handlingTime": { "@type": "QuantitativeValue", "minValue": 1, "maxValue": 2, "unitCode": "DAY" },
"transitTime": { "@type": "QuantitativeValue", "minValue": 3, "maxValue": 7, "unitCode": "DAY" }
},
"freeShippingThreshold":{ "@type": "MonetaryAmount", "value": "59", "currency": "USD" }
}
}
}
</script>
nutrition (9 fields), certifications (4 fields), and okendo (2 fields). None of them exist in the Nature’s Path Shopify store yet. A Shopify developer must create each definition in Settings → Custom data → Products before this Liquid will render anything beyond the hard-coded USDA Organic + Non-GMO certifications and the offer block. See the Shopify Metafields card at the top of the Snippet Library for the full list with types, descriptions, and example values.
Emits BreadcrumbList JSON-LD alongside the visible breadcrumb UI. The existing snippets/breadcrumbs.liquid file already constructs a breadcrumbs array for the visible HTML; this snippet consumes the same array. No new data pipeline.
- Included in
snippets/breadcrumbs.liquid(after the visible HTML)- Parameters
breadcrumbsarray of{ name, url }entries.- Render frequency
- Every page that has breadcrumbs (PDP, collection, blog post, content page).
Hard-Coded
- JSON-LD envelope with
https://schema.orgcontext - Last breadcrumb omits
itemURL per the spec (the current page)
From Liquid
breadcrumbsarray (already constructed by the visible breadcrumb HTML — reuse it)shop.urlfor absolute URLs
Drop-in Liquid
{%- comment -%}
BreadcrumbList JSON-LD.
Expects `breadcrumbs`: an array of { name, url } entries.
Last entry should omit `url` (it's the current page).
{%- endcomment -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{%- for crumb in breadcrumbs -%}
{
"@type": "ListItem",
"position": {{ forloop.index }},
"name": {{ crumb.name | json }}
{%- if crumb.url -%}
, "item": "{{ shop.url }}{{ crumb.url }}"
{%- endif -%}
}{%- unless forloop.last -%},{%- endunless -%}
{%- endfor -%}
]
}
</script>
CollectionPage + ItemList for category pages. Each ItemList entry points at the Product @id declared by dbc-schema-product.liquid — same absolute-URL pattern. Gives Google an explicit category structure signal and strengthens the site-wide entity graph.
- Included in
sections/main-collection-product-grid.liquid- Parameters
- Implicit
collectionfrom enclosing Liquid context. - Render frequency
- Once per collection page (60+ collections).
Hard-Coded
publisher→#organization,isPartOf→#websiteitemListOrder=ItemListOrderAscending@idpattern:{shop.url}{collection.url}#collectionpage, ItemList uses#itemlist- Cap enumeration at 50 products per ItemList to keep payload reasonable
From Liquid
collection.title,collection.description,collection.urlcollection.all_products_countfornumberOfItemscollection.products(iterated for ItemList entries)
Drop-in Liquid
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"@id": "{{ shop.url }}{{ collection.url }}#collectionpage",
"url": "{{ shop.url }}{{ collection.url }}",
"name": {{ collection.title | json }},
"description": {{ collection.description | strip_html | json }},
"isPartOf": { "@id": "https://naturespath.com/#website" },
"publisher": { "@id": "https://naturespath.com/#organization" },
"mainEntity": {
"@type": "ItemList",
"@id": "{{ shop.url }}{{ collection.url }}#itemlist",
"itemListOrder": "https://schema.org/ItemListOrderAscending",
"numberOfItems": {{ collection.all_products_count }},
"itemListElement": [
{%- for product in collection.products limit: 50 -%}
{
"@type": "ListItem",
"position": {{ forloop.index }},
"url": "{{ shop.url }}{{ product.url }}"
}{%- unless forloop.last -%},{%- endunless -%}
{%- endfor -%}
]
}
}
</script>
Dual-mode article schema. Branches on article.blog.handle: on the recipes blog, emits Recipe with ingredients, instructions, and timings; on any other blog, emits BlogPosting. One snippet, one template include, two schema types.
- Included in
sections/article-template.liquid- Parameters
- Implicit
articlefrom enclosing Liquid context. - Render frequency
- 551 recipe posts + 1,227 blog posts = 1,778 articles.
Hard-Coded
publisher→#organization- Default author entity:
Nature’s Path Editorial Team(used whenarticle.authoris blank) - Recipe instructions rendered as
HowToStepsub-type (supported; distinct from the deprecated standalone HowTo rich result) - Branching logic:
article.blog.handle == 'recipes'→ Recipe; else → BlogPosting
From Liquid
article.title,article.excerpt,article.image,article.url,article.published_at,article.updated_at,article.author- Recipe-only:
article.metafields.recipe.prep_time,.cook_time,.total_time,.yield,.category,.cuisine,.ingredients,.instructions
Drop-in Liquid
{%- comment -%}
dbc-schema-article.liquid
Emits Recipe or BlogPosting depending on article.blog.handle.
Include from sections/article-template.liquid.
{%- endcomment -%}
{%- liquid
assign author_name = article.author
if author_name == blank
assign author_name = "Nature's Path Editorial Team"
endif
assign author_url = article.metafields.author.profile_url
assign r = article.metafields.recipe
-%}
{%- if article.blog.handle == "recipes" -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Recipe",
"@id": "{{ shop.url }}{{ article.url }}#recipe",
"name": {{ article.title | json }},
"image": [
"{{ article.image | img_url: '1x1' | prepend: 'https:' }}",
"{{ article.image | img_url: '4x3' | prepend: 'https:' }}",
"{{ article.image | img_url: '16x9' | prepend: 'https:' }}"
],
"author": {
"@type": "Person",
"name": {{ author_name | json }}
{%- if author_url != blank -%}
, "url": {{ author_url | json }}
{%- endif -%}
},
"publisher": { "@id": "https://naturespath.com/#organization" },
"datePublished": "{{ article.published_at | date: '%Y-%m-%d' }}",
"dateModified": "{{ article.updated_at | date: '%Y-%m-%d' }}",
"description": {{ article.excerpt | strip_html | json }},
"inLanguage": "en-US",
"isPartOf": { "@id": "https://naturespath.com/#website" },
"mainEntityOfPage": { "@type": "WebPage", "@id": "{{ shop.url }}{{ article.url }}" },
"prepTime": {{ r.prep_time | json }},
"cookTime": {{ r.cook_time | json }},
"totalTime": {{ r.total_time | json }},
"recipeYield": {{ r.yield | json }},
"recipeCategory": {{ r.category | json }},
"recipeCuisine": {{ r.cuisine | default: "American" | json }},
"keywords": {{ article.tags | join: ", " | json }},
{%- if r.diet != blank -%}
"suitableForDiet": [
{%- for diet in r.diet.value -%}
"https://schema.org/{{ diet }}Diet"{%- unless forloop.last -%},{%- endunless -%}
{%- endfor -%}
],
{%- endif -%}
"recipeIngredient": {{ r.ingredients | json }},
"recipeInstructions": [
{%- for step in r.instructions.value -%}
{ "@type": "HowToStep", "text": {{ step | json }} }{%- unless forloop.last -%},{%- endunless -%}
{%- endfor -%}
]
{%- if r.calories != blank -%}
, "nutrition": {
"@type": "NutritionInformation",
"servingSize": {{ r.serving_size | json }},
"calories": {{ r.calories | json }},
"proteinContent": {{ r.protein | json }},
"fatContent": {{ r.fat | json }},
"carbohydrateContent": {{ r.carbohydrate | json }},
"fiberContent": {{ r.fiber | json }},
"sugarContent": {{ r.sugar | json }}
}
{%- endif -%}
{%- if r.video_url != blank -%}
, "video": {
"@type": "VideoObject",
"name": {{ article.title | json }},
"thumbnailUrl": "{{ article.image | img_url: 'master' | prepend: 'https:' }}",
"contentUrl": {{ r.video_url | json }},
"uploadDate": "{{ article.published_at | date: '%Y-%m-%dT%H:%M:%S%z' }}"
}
{%- endif -%}
}
</script>
{%- else -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"@id": "{{ shop.url }}{{ article.url }}#blogposting",
"headline": {{ article.title | json }},
"description": {{ article.excerpt | strip_html | json }},
"image": [
"{{ article.image | img_url: '1x1' | prepend: 'https:' }}",
"{{ article.image | img_url: '4x3' | prepend: 'https:' }}",
"{{ article.image | img_url: '16x9' | prepend: 'https:' }}"
],
"datePublished": "{{ article.published_at | date: '%Y-%m-%d' }}",
"dateModified": "{{ article.updated_at | date: '%Y-%m-%d' }}",
"author": {
"@type": "Person",
"name": {{ author_name | json }}
{%- if author_url != blank -%}
, "url": {{ author_url | json }}
{%- endif -%}
},
"publisher": { "@id": "https://naturespath.com/#organization" },
"isPartOf": { "@id": "https://naturespath.com/#website" },
"mainEntityOfPage":{ "@type": "WebPage", "@id": "{{ shop.url }}{{ article.url }}" },
"inLanguage": "en-US",
"articleSection": {{ article.metafields.post.section | default: article.blog.title | json }},
"wordCount": {{ article.content | strip_html | split: " " | size }},
"keywords": {{ article.tags | join: ", " | json }}
{%- if article.metafields.post.about != blank -%}
, "about": {{ article.metafields.post.about | json }}
{%- endif -%}
}
</script>
{%- endif -%}
recipe (up to 15 fields for recipe posts), post (2 fields for non-recipe posts: section, about), and author (1 optional field: profile_url). None exist in the Nature’s Path Shopify store yet. A Shopify developer must create each definition in Settings → Custom data → Articles. Without them, Recipe posts emit name + image + author + dates only (no ingredients, instructions, or timings) and BlogPosting posts fall back to blog title for articleSection. See the Shopify Metafields card at the top of the Snippet Library for the full list with types, descriptions, and example values.
AboutPage JSON-LD with per-handle branches. Drives /pages/about, the Stephens family page, the brand family hub, and each individual sub-brand page — all with a single snippet that hard-codes the right mainEntity and about references for each handle.
- Included in
templates/page.jsoncustom schema section- Parameters
- Implicit
pagefrom enclosing Liquid context. - Render frequency
- 9 content pages (about, our-family, our-path, our-history, natures-path, love-crunch, envirokidz, que-pasa, anitas-organic-milling).
Hard-Coded
- Case/when over
page.handledeterminesmainEntityandaboutarrays /pages/our-familyhard-codes all 4 Stephens Person@idreferences inabout- Sub-brand pages (envirokidz, love-crunch, que-pasa, anitas-organic-milling) hard-code the matching Brand
@id isPartOf→#website; defaultmainEntityis#organization
From Liquid
page.handle,page.url,page.title
Drop-in Liquid
{%- comment -%}
dbc-schema-about-page.liquid
AboutPage JSON-LD, gated on page.handle.
Include from templates/page.json via a custom schema section,
or inline in a page-specific template (page.natures-path.liquid, etc.).
No-op on any handle outside the 9 supported pages.
{%- endcomment -%}
{%- liquid
assign supported = "about,our-path,our-history,our-family,natures-path,envirokidz,love-crunch,que-pasa,anitas-organic-milling" | split: ","
assign is_supported = false
for h in supported
if h == page.handle
assign is_supported = true
break
endif
endfor
-%}
{%- if is_supported -%}
{%- liquid
case page.handle
when "natures-path"
assign main_entity_id = "https://naturespath.com/#brand-natures-path"
when "envirokidz"
assign main_entity_id = "https://naturespath.com/#brand-envirokidz"
when "love-crunch"
assign main_entity_id = "https://naturespath.com/#brand-love-crunch"
when "que-pasa"
assign main_entity_id = "https://naturespath.com/#brand-que-pasa"
when "anitas-organic-milling"
assign main_entity_id = "https://naturespath.com/#brand-anitas-organic-mill"
else
assign main_entity_id = "https://naturespath.com/#organization"
endcase
-%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "AboutPage",
"@id": "{{ shop.url }}{{ page.url }}#aboutpage",
"url": "{{ shop.url }}{{ page.url }}",
"name": {{ page.title | json }},
{%- if page.content != blank -%}
"description": {{ page.content | strip_html | truncate: 300 | json }},
{%- endif -%}
"isPartOf": { "@id": "https://naturespath.com/#website" },
"mainEntity": { "@id": "{{ main_entity_id }}" },
"publisher": { "@id": "https://naturespath.com/#organization" },
"inLanguage": "en-US",
"about": [
{%- case page.handle -%}
{%- when "our-family" -%}
{ "@id": "https://naturespath.com/#arran-stephens" },
{ "@id": "https://naturespath.com/#ratana-stephens" },
{ "@id": "https://naturespath.com/#arjan-stephens" },
{ "@id": "https://naturespath.com/#jyoti-stephens" }
{%- when "natures-path" -%}
{ "@id": "https://naturespath.com/#brand-natures-path" }
{%- when "envirokidz" -%}
{ "@id": "https://naturespath.com/#brand-envirokidz" }
{%- when "love-crunch" -%}
{ "@id": "https://naturespath.com/#brand-love-crunch" }
{%- when "que-pasa" -%}
{ "@id": "https://naturespath.com/#brand-que-pasa" }
{%- when "anitas-organic-milling" -%}
{ "@id": "https://naturespath.com/#brand-anitas-organic-mill" },
{ "@id": "https://naturespath.com/#anitas-organic-mill-org" }
{%- else -%}
{ "@id": "https://naturespath.com/#organization" },
{ "@id": "https://naturespath.com/#arran-stephens" },
{ "@id": "https://naturespath.com/#ratana-stephens" }
{%- endcase -%}
],
"lastReviewed": "{{ page.updated_at | date: '%Y-%m-%d' }}"
}
</script>
{%- endif -%}
ContactPage JSON-LD for /pages/contact-us. Zero parameters — the page is one page with one purpose, so there’s nothing to parameterize.
- Included in
templates/page.contact.json- Parameters
- None.
- Render frequency
- Once, on the contact page.
Hard-Coded
- Page URL
https://naturespath.com/pages/contact-usand titleContact Us — Nature’s Path mainEntity→#organization,isPartOf→#website
From Liquid
- None.
Drop-in Liquid
{%- comment -%}
dbc-schema-contact-page.liquid
ContactPage JSON-LD for /pages/contact-us.
Include from templates/page.contact.json (or equivalent contact template).
{%- endcomment -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "ContactPage",
"@id": "https://naturespath.com/pages/contact-us#contactpage",
"url": "https://naturespath.com/pages/contact-us",
"name": "Contact Us \u2014 Nature's Path",
"isPartOf": { "@id": "https://naturespath.com/#website" },
"mainEntity": { "@id": "https://naturespath.com/#organization" },
"publisher": { "@id": "https://naturespath.com/#organization" },
"inLanguage": "en-US",
"about": {
"@type": "Organization",
"@id": "https://naturespath.com/#organization",
"name": "Nature's Path",
"telephone": "+1-866-880-7284",
"email": "wholesale@naturespath.com",
"contactPoint": [
{
"@type": "ContactPoint",
"telephone": "+1-866-880-7284",
"contactType": "customer service",
"areaServed": ["US", "CA"],
"availableLanguage":["English", "French"],
"hoursAvailable": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:30",
"closes": "17:00"
}
},
{
"@type": "ContactPoint",
"email": "wholesale@naturespath.com",
"contactType": "wholesale",
"areaServed": ["US", "CA"]
}
]
}
}
</script>
FAQPage JSON-LD. Reads Q/A pairs from either a page metafield array or by introspecting the existing <details> accordion elements on /pages/faqs. Google deprecated FAQ rich results for commercial pages, but AI engines still parse FAQPage for citation extraction.
- Included in
/pages/faqstemplate (and future collection-specific FAQ blocks)- Parameters
faqsarray of{ question, answer }entries.- Render frequency
- Once per FAQ-enabled page.
Hard-Coded
- JSON-LD envelope
- Question / Answer schema shape
From Liquid
faqsarray (frompage.metafields.content.faqsor equivalent)page.urlfor the FAQPage@id
Drop-in Liquid
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"@id": "{{ shop.url }}{{ page.url }}#faqpage",
"mainEntity": [
{%- for faq in faqs -%}
{
"@type": "Question",
"name": {{ faq.question | json }},
"acceptedAnswer": {
"@type": "Answer",
"text": {{ faq.answer | strip_html | json }}
}
}{%- unless forloop.last -%},{%- endunless -%}
{%- endfor -%}
]
}
</script>
LocalBusiness schema for the store-locator page. Parallels the subOrganization entries already declared in the entity graph, elevated to a LocalBusiness type so the page participates in Google Maps / GBP signals. Don’t ship without a matching verified Google Business Profile or the signals diverge.
- Included in
/pages/store-locatortemplate (gate on verified GBP)- Parameters
- None.
- Render frequency
- Once, on the store locator page.
Hard-Coded
- Richmond BC HQ (9100 Van Horne Way, V6X 1W3)
- Customer service phone
+1-866-880-7284 parentOrganization→#organizationbranchOfreferences the 3 facility@ids (Blaine, Sussex, Chilliwack) already declared in the entity graph- Accepted currencies USD + CAD
From Liquid
- None.
Drop-in Liquid
{%- comment -%}
dbc-schema-local-business.liquid
LocalBusiness schema for the store-locator / HQ-contact page.
Include only after a matching Google Business Profile is claimed and
verified for the Richmond BC HQ; otherwise the signals diverge.
{%- endcomment -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FoodEstablishment",
"@id": "https://naturespath.com/#local-business",
"name": "Nature's Path Foods",
"legalName":"Nature's Path Foods Inc.",
"url": "https://naturespath.com/",
"logo": "https://naturespath.com/cdn/shop/files/natures-path-logo.png",
"image": "https://naturespath.com/cdn/shop/files/natures-path-logo.png",
"description": "North America's largest certified organic breakfast and snack food company. Headquartered in Richmond, BC, Canada since 1985.",
"parentOrganization": { "@id": "https://naturespath.com/#organization" },
"address": {
"@type": "PostalAddress",
"streetAddress": "9100 Van Horne Way",
"addressLocality":"Richmond",
"addressRegion": "BC",
"postalCode": "V6X 1W3",
"addressCountry": "CA"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 49.1866,
"longitude": -123.1280
},
"telephone": "+1-866-880-7284",
"email": "wholesale@naturespath.com",
"currenciesAccepted": "USD, CAD",
"paymentAccepted": "Cash, Credit Card, Invoice",
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:30",
"closes": "17:00"
}
],
"servesCuisine": ["Breakfast", "Organic", "Vegetarian", "Vegan", "Gluten-free"],
"areaServed": [
{ "@type": "Country", "name": "United States" },
{ "@type": "Country", "name": "Canada" },
{ "@type": "Country", "name": "United Kingdom" },
{ "@type": "Country", "name": "Mexico" }
],
"branchOf": [
{ "@id": "https://naturespath.com/#facility-blaine" },
{ "@id": "https://naturespath.com/#facility-sussex" },
{ "@id": "https://naturespath.com/#anitas-organic-mill-org" }
],
"sameAs": [
"https://en.wikipedia.org/wiki/Nature%27s_Path",
"https://www.wikidata.org/wiki/Q6980861",
"https://www.crunchbase.com/organization/nature-s-path",
"https://ca.linkedin.com/company/nature's-path-foods"
]
}
</script>
Verify before deploy: the geo coordinates above are approximate for 9100 Van Horne Way, Richmond BC — confirm the exact lat/lon via Google Maps or the Richmond municipal GIS before shipping. Opening hours are HQ office hours; adjust if the store-locator page represents a retail-facing location instead of the corporate HQ.
Reusable fragment that emits a Speakable specification with hard-coded CSS selectors. Rendered from inside article, product, about-page, and FAQ snippets so one edit to the selector list propagates everywhere.
- Included in
- Rendered from
dbc-schema-article.liquid,dbc-schema-about-page.liquid,dbc-schema-product.liquid,dbc-schema-faq.liquid - Parameters
- None.
- Render frequency
- As a nested object inside its parent schema.
Hard-Coded
- CSS selectors:
.article-intro,.faq-answer,.product-description__intro SpeakableSpecificationtype
From Liquid
- None.
Drop-in Liquid
{%- comment -%}
Fragment: renders a `speakable` property.
Usage inside another schema block:
"speakable": {% render 'dbc-schema-speakable' %}
{%- endcomment -%}
{
"@type": "SpeakableSpecification",
"cssSelector": [
".article-intro",
".faq-answer",
".product-description__intro"
]
}
Deployment pattern: the dev team ships one PR that adds the 10 snippets, wires each include point, and removes the legacy inline blocks (Whisk ProductGroup, Okendo Product, minimal sitewide Organization). Subsequent schema additions — new certifications, new Stephens family members, new sub-brands from future acquisitions — are single-snippet edits, not theme-wide sweeps.