How to Add and Manage Staff Permissions in Shopify
Shopify lets you add staff members and assign specific permissions so your team can help run the store without access...
Here's something most Shopify store owners completely miss: your blog posts are invisible to Google's rich results without structured data. You're writing great content, taking the time to create tutorials and FAQs, and Google can't even display them properly in search because it doesn't know what type of content you're publishing.
Schema markup — specifically JSON-LD structured data — is the language that tells Google, Bing, ChatGPT, and every other search engine exactly what your content is. An article. A tutorial. A recipe. An FAQ. When Google understands your content type, it can display it as rich snippets — those expanded search results with star ratings, step numbers, FAQ dropdowns, recipe cards, and video thumbnails that dominate the first page.
The stores that show up with rich snippets consistently get higher click-through rates than basic blue links. That's not opinion — it's data. And the best part? Most of your competitors aren't doing this. They're relying on apps that generate generic, minimal schema or they're doing nothing at all.
I know what you're thinking — "Can't I just install an app for this?" You can. And for basic product and collection page schema, apps like InstaIndex do a solid job. But for your blog content, manual schema through metafields gives you something apps simply cannot: complete control over every field, every property, every detail.
Google's E-E-A-T framework (Experience, Expertise, Authoritativeness, Trustworthiness) looks at who wrote the content and what qualifies them. App-generated Article schema might include your name, but it won't include your job title as "eCommerce Business Consultant & Shopify Expert," your university teaching credentials, or your social profile links. Your manual Article schema includes all of that — telling Google this content comes from a real, qualified expert. That's the difference between ranking on page one and getting buried.
Not every blog post needs every schema type. Here's a breakdown of which types to use and when, so you're not guessing every time you publish.
Depending on what you sell and write about, you may also need these schema types. Each one gets its own metafield using the same approach — create the JSON metafield definition, add the Custom Liquid output, paste the raw JSON per post.
First, we'll create the metafield definitions. This tells Shopify to add JSON fields to every blog post where you can paste your schema markup. You do this once and it's available on every blog post going forward.
1 Navigate to Settings in Your Shopify Dashboard
Click Settings in the bottom-left corner of your Shopify admin. This is where all your store configuration lives.
2 Click "Metafields and Metaobjects"
In the Settings menu, find and click Metafields and metaobjects. This is where you define custom data fields for your store's content types — products, collections, pages, and blog posts.
3 Open "Blog Posts" Metafields
Click on Blog posts from the metafield content types list. This is where you'll create your schema definitions. You need to create these metafields:
If you need the additional schema types, also create:
4 Click "Add Definition"
Click the Add definition button to create your first metafield. You'll repeat this process for each schema type you need.
5 Enter the Metafield Name
Type the name of your first metafield — start with article_schema. Shopify will automatically generate the namespace and key as custom.article_schema, which is exactly what your Liquid code will reference.
6 Click "Select Type"
Click the Select type dropdown to choose what kind of data this metafield will hold.
7 Select "JSON" as the Type
Find and click JSON in the type list. This is critical — the JSON type validates your structured data when you save it. If your JSON has a syntax error (missing comma, unclosed bracket), Shopify will catch it before it goes live. Multi-line text won't validate — broken JSON goes straight to your page and silently fails.
8 Click "Save"
Save your first metafield definition. Now repeat steps 4-8 for each additional schema type: faq_schema, howto_schema, and any others you need (recipe_schema, video_schema, product_review_schema).
The metafields store your JSON, but they don't output anything to the page by themselves. Think of them as a filing cabinet — the data sits there until you tell the theme to pull it out. This Custom Liquid section reads each metafield and wraps it in the proper <script> tags so Google can find it.
9 Navigate to Your Online Store
Go back to your main Shopify dashboard and click Online Store in the left sidebar.
10 Click "Edit Theme"
Click the Edit theme button (or Customize depending on your Shopify version) to open the Theme Customizer.
11 Open the Page Type Dropdown
At the top of the Theme Customizer, you'll see a dropdown that says "Home page" by default. Click it to see all your template types.
12 Select "Blog Posts"
Find and click Blog posts in the template list. This takes you to the blog post template editor where your individual blog posts are rendered.
13 Choose Your Blog Post Template
Select the Default blog post template — or if you've created a custom blog template, select that instead. The Custom Liquid section you add here will apply to every blog post that uses this template.
14 Click the "+" to Add a New Section
In the Template sections panel on the left, click the + button to add a new section to your blog post template.
15 Add a "Custom Liquid" Section
Find and select Custom Liquid from the section list. This gives you a code field where you can add Liquid code that runs on every blog post using this template.
16 Paste the Schema Output Code
In the Custom Liquid field, paste the following code. This checks each metafield — if it has content, it wraps the JSON in proper script tags for Google. If a metafield is empty (for example, no Recipe schema on a non-recipe post), nothing outputs. Clean and automatic.
{% if article.metafields.custom.article_schema %}
<script type="application/ld+json">
{{ article.metafields.custom.article_schema }}
</script>
{% endif %}
{% if article.metafields.custom.faq_schema %}
<script type="application/ld+json">
{{ article.metafields.custom.faq_schema }}
</script>
{% endif %}
{% if article.metafields.custom.howto_schema %}
<script type="application/ld+json">
{{ article.metafields.custom.howto_schema }}
</script>
{% endif %}
{% if article.metafields.custom.recipe_schema %}
<script type="application/ld+json">
{{ article.metafields.custom.recipe_schema }}
</script>
{% endif %}
{% if article.metafields.custom.video_schema %}
<script type="application/ld+json">
{{ article.metafields.custom.video_schema }}
</script>
{% endif %}
{% if article.metafields.custom.product_review_schema %}
<script type="application/ld+json">
{{ article.metafields.custom.product_review_schema }}
</script>
{% endif %}
17 Click "Save"
Save your theme customization. That's it — the Custom Liquid section is now part of your blog post template. Every blog post that uses this template will automatically output whatever schema you paste into its metafields.
Here are ready-to-use JSON templates for each schema type. For each blog post, copy the relevant template, replace the placeholder text in [BRACKETS], and paste it into the matching metafield. Shopify's JSON validation catches errors before they go live.
<script> tags. The Custom Liquid section handles the wrapper automatically.{
"@context": "https://schema.org",
"@type": "Article",
"headline": "[Blog Post Title]",
"description": "[Meta description — 150-160 characters]",
"image": "[Featured image URL]",
"author": {
"@type": "Person",
"name": "Veronica Jeans",
"url": "https://veronicajeans.com",
"jobTitle": "eCommerce Business Consultant & Shopify Expert",
"description": "Veronica Jeans is an eCommerce business consultant and Shopify expert who has coached entrepreneurs to build 7-Figure online businesses. She lectures on E-Commerce, SEO/SEM, and Social Media at Collegium Civitas University in Poland.",
"sameAs": [
"https://www.youtube.com/@veronicajeans",
"https://www.linkedin.com/in/veronicajeans/",
"https://www.instagram.com/vaborla/"
]
},
"publisher": {
"@type": "Organization",
"name": "Veronica Jeans - eCommerce Consulting",
"logo": {
"@type": "ImageObject",
"url": "[YOUR LOGO URL]"
}
},
"datePublished": "[YYYY-MM-DD]",
"dateModified": "[YYYY-MM-DD]",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "[Full blog post URL]"
}
}
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "[Question 1 — must match visible FAQ text exactly]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Answer 1 — must match visible FAQ text exactly]"
}
},
{
"@type": "Question",
"name": "[Question 2]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Answer 2]"
}
},
{
"@type": "Question",
"name": "[Question 3]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Answer 3]"
}
},
{
"@type": "Question",
"name": "[Question 4]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Answer 4]"
}
},
{
"@type": "Question",
"name": "[Question 5]",
"acceptedAnswer": {
"@type": "Answer",
"text": "[Answer 5]"
}
}
]
}
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "[How to ... — tutorial title]",
"description": "[Brief description of what this tutorial teaches]",
"image": "[Featured image URL]",
"totalTime": "PT[X]M",
"tool": [
{ "@type": "HowToTool", "name": "[Tool 1]" },
{ "@type": "HowToTool", "name": "[Tool 2]" }
],
"supply": [
{ "@type": "HowToSupply", "name": "[Supply/requirement 1]" },
{ "@type": "HowToSupply", "name": "[Supply/requirement 2]" }
],
"step": [
{
"@type": "HowToStep",
"position": 1,
"name": "[Step 1 title]",
"text": "[Step 1 instructions]",
"image": "[Step 1 screenshot URL]"
},
{
"@type": "HowToStep",
"position": 2,
"name": "[Step 2 title]",
"text": "[Step 2 instructions]",
"image": "[Step 2 screenshot URL]"
}
]
}
This is a big one for stores selling food products, skincare ingredients, candle-making supplies, or any product where customers make something at home. Recipe rich results are some of the most visually prominent in Google search — they show images, cook time, ratings, and calorie counts right in the results page.
{
"@context": "https://schema.org",
"@type": "Recipe",
"name": "[Recipe Name]",
"description": "[Brief recipe description]",
"image": "[Recipe photo URL]",
"author": {
"@type": "Person",
"name": "Veronica Jeans"
},
"datePublished": "[YYYY-MM-DD]",
"prepTime": "PT[X]M",
"cookTime": "PT[X]M",
"totalTime": "PT[X]M",
"recipeYield": "[e.g., 4 servings]",
"recipeCategory": "[e.g., Dessert, Main Course, Skincare]",
"recipeCuisine": "[e.g., American, DIY, Artisan]",
"keywords": "[keyword1, keyword2, keyword3]",
"nutrition": {
"@type": "NutritionInformation",
"calories": "[X] calories",
"servingSize": "[e.g., 1 cup]"
},
"recipeIngredient": [
"[Ingredient 1 with amount — e.g., 2 cups flour]",
"[Ingredient 2 with amount]",
"[Ingredient 3 with amount]",
"[Ingredient 4 with amount]"
],
"recipeInstructions": [
{
"@type": "HowToStep",
"position": 1,
"name": "[Step 1 title]",
"text": "[Step 1 detailed instructions]",
"image": "[Step 1 photo URL — optional]"
},
{
"@type": "HowToStep",
"position": 2,
"name": "[Step 2 title]",
"text": "[Step 2 detailed instructions]"
},
{
"@type": "HowToStep",
"position": 3,
"name": "[Step 3 title]",
"text": "[Step 3 detailed instructions]"
}
]
}
recipeCategory field appropriately (e.g., "Skincare" or "Craft" instead of "Main Course").{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "[Video Title]",
"description": "[Video description — what viewers will learn]",
"thumbnailUrl": "[Video thumbnail image URL]",
"uploadDate": "[YYYY-MM-DD]",
"duration": "PT[X]M[Y]S",
"contentUrl": "[Direct video file URL — if available]",
"embedUrl": "[YouTube or ScribeNow embed URL]",
"author": {
"@type": "Person",
"name": "Veronica Jeans"
}
}
{
"@context": "https://schema.org",
"@type": "Product",
"name": "[Product Name]",
"description": "[Product description]",
"image": "[Product image URL]",
"brand": {
"@type": "Brand",
"name": "[Brand Name]"
},
"review": {
"@type": "Review",
"reviewRating": {
"@type": "Rating",
"ratingValue": "[1-5]",
"bestRating": "5"
},
"author": {
"@type": "Person",
"name": "Veronica Jeans"
},
"reviewBody": "[Your review summary]"
},
"offers": {
"@type": "Offer",
"url": "[Product page URL]",
"priceCurrency": "USD",
"price": "[Price]",
"availability": "https://schema.org/InStock"
}
}
Never publish a blog post without validating your schema first. Broken structured data doesn't just fail to show rich results — it can trigger warnings in Google Search Console that affect your entire site's standing.
"Missing field: image" — You left the image URL as a placeholder. Replace it with your actual featured image URL.
"Invalid date format" — Dates must be in YYYY-MM-DD format. "February 15, 2026" won't work — use "2026-02-15".
"Missing field: author" — Your Article schema needs the complete author object, not just a name string.
"JSON-LD syntax error" — Usually a missing comma, extra comma after the last item in a list, or unclosed bracket. Shopify's JSON metafield catches most of these on save.
You've just built something most Shopify store owners never even think about — a complete, theme-independent structured data system that makes every blog post eligible for rich results. No app dependencies, no monthly fees, no code files that break on theme updates.
Your Article schema tells Google you're a credentialed expert. Your FAQ schema puts expandable answers directly in search results. Your HowTo schema displays your tutorials with numbered steps and images. And your Recipe, Video, and Product Review schemas make specialized content stand out from every competitor who's still publishing plain blog posts with zero structured data.
This is infrastructure. The kind of thing that works in the background on every post you publish from today forward, compounding your SEO advantage over time. The store owners who build systems like this are the ones who stop trading hours for traffic and start building authority that generates revenue while they sleep.
Want help implementing this across your store and optimizing your entire Shopify SEO foundation? Let's build the systems that put your store in front of the right customers — consistently.
A step-by-step guide to creating JSON metafields for structured data, adding a Custom Liquid section to your blog post template, and pasting schema markup that outputs automatically on every blog post.
Quick answers to common questions about this topic