Article is the Schema.org type for an editorial post on a Shopify blog1. Google requires zero fields strictly but strongly recommends headline, image, datePublished, dateModified, author, and publisher2. Some Shopify themes auto-emit a partial Article block on /blogs/*/posts/* pages; many do not. The 2026 install pattern: layer or replace inside main-article.liquid, using Liquid variables (article.title, article.image, article.published_at, article.user) and referencing the site-wide Organization by @id as the publisher.
Article JSON-LD is the schema type with the highest AI-engine citation lift per byte of markup. ChatGPT, Perplexity, Claude, and Gemini all parse Article blocks to confirm authorship, date, and publisher when deciding whether to cite a post — the bylines and dates in prose are inferred; the structured-data fields are read directly.
§01Definition
What Article schema is
Per Schema.org v30.0, Article is 'a news article or piece of investigative report.' Type hierarchy: Thing > CreativeWork > Article. Subtypes that matter for Shopify blogs: BlogPosting (informal editorial), NewsArticle (eligible for Top Stories carousel), TechArticle (technical how-to). For most Shopify blog posts, the bare Article type is the right choice unless the post is a true news story (NewsArticle) or technical reference (TechArticle).
Mental model: Article describes one editorial page on the storefront. A Shopify blog post is exactly that — one piece of content, with a title, an author, a publication date, optional images, and a body. The Article block captures those fields in a single JSON-LD object placed inside main-article.liquid.
§02Auto-emission
What Shopify themes emit on blog posts
Shopify's documentation does not name Article schema as part of the default theme auto-emission set; the SEO overview only commits to Product schema. View-source audit on Dawn-derivative themes (verified 2026-05-22) finds inconsistent behaviour: some themes emit a BlogPosting block with headline, image, datePublished, author, publisher; others emit no Article schema at all. The audit answer is per-theme.
Action: view source on a blog post page and find-on-page for BlogPosting or Article. If absent or sparse, the install below is for you. If present, audit the field set against the recommended list in the next section — many themes ship Article with name but no author Person object, or with datePublished but no dateModified.
§03Fields
Article fields per Google's recommendation
The fields Google's Article documentation strongly recommends: headline (Text, ≤110 characters), image (ImageObject array — multiple aspect ratios preferred for News), datePublished (Date or DateTime, ISO 8601), dateModified (Date or DateTime), author (Person or Organization with name and url), publisher (Organization with name and logo, referenced by @id when defined site-wide). Optional but useful: articleBody, articleSection (e.g. 'Skincare tips'), wordCount, inLanguage, mainEntityOfPage.
headline — recommended. {{ article.title | escape }}. Keep under 110 characters per Google's guidance.
image — recommended. {{ article.image | image_url: width: 1200 }} with width and height. Multiple aspect ratios (1:1, 4:3, 16:9) preferred for News.
author — recommended. Person with name from article.author and url to a /authors/ page if one exists.
publisher — recommended. Organization referenced by @id (the site-wide Organization from theme.liquid).
articleSection — optional. The blog's name or category — {{ blog.title | escape }}.
wordCount — optional. Useful for AI engine extraction.
mainEntityOfPage — recommended. The canonical URL of the article.
§04Example
JSON-LD example — Article in main-article.liquid
The block below is the full Article JSON-LD for a Shopify blog post. Paste inside main-article.liquid (modern themes) or article-template.liquid (older themes). Reference the Organization defined in theme.liquid via @id.
JSON-LDArticle inside main-article.liquid — Liquid-driven from article.* variables
Rich Results Test against a Shopify blog post URL with Article JSON-LD should report Article detected, zero errors. Common warnings: 'Headline is over 110 characters' (shorten in the Shopify admin), 'image dimensions not specified' (add width and height integers), 'author.url is recommended' (add). For Top Stories carousel eligibility (NewsArticle subtype only), additional fields are recommended — multiple image aspect ratios, dateModified within the past 48 hours.
A subtle Shopify gotcha on dateModified: article.updated_at in Liquid returns the last save timestamp from Shopify's admin, which includes saves that don't change the article content (touching tags, changing the SEO title). If your dateModified bumps every time you re-touch a post in admin, AI engines may infer freshness that isn't there. The honest fix is a metafield (e.g. seo.content_modified) the merchant updates only when the post's body content changes.
§06Gotchas
Shopify gotchas on Article
Three gotchas. First: Shopify's article.published_at and article.updated_at sometimes serialise with different timezone formats depending on theme/locale — always pass through | date: '%Y-%m-%dT%H:%M:%S%z' for ISO 8601 with timezone. Second: forgetting | escape on article.title causes JSON parse errors when titles contain apostrophes ('What's new in 2026' breaks the block). Third: emitting Article on /blogs/foo (the blog index) instead of /blogs/foo/articles/bar (the article itself). Blog indexes are CollectionPage; only article URLs carry Article schema.
A fourth gotcha for multi-author Shopify blogs: article.author returns one byline string per article, not a Person object with verification fields. If the blog has multiple authors with distinct expertise (a furniture brand with a craftsmanship column and a styling column), build a Liquid case statement that maps article.author to a Person object with url, jobTitle, knowsAbout. The work is per-author and pays off in author-Person knowledge-graph confirmation for AI engines.