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...
You've been manually copying and pasting your author bio into every blog post, haven't you? Or worse, you've been living without one because it's too much work. Here's the truth: most stores either skip author bios entirely or install yet another app that costs $10+/month and has to be completely updated (breaks) when you switch themes.
There's a better way. Shopify's metaobjects let you create a reusable, schema-optimized author bio system that survives theme updates, costs nothing, and actually helps your SEO. This is the same method I use for my 7-figure clients because it works while you sleep.
What you'll accomplish in this guide:
Time investment: 30-45 minutes
Technical level: Beginner-friendly (I'll show you exactly what to click)
Cost: $0
This is where we tell Shopify what information to store about you as an author. Think of it as creating a template that you'll fill in once and use everywhere.

author (this creates automatically, all lowercase)Field 1: Name
Field 2: Description
Field 3: Title
Field 4: Image
Field 5: Social Links
Field 6: Contact


| Field name | Type | Required | Notes |
|---|---|---|---|
name |
Single line text | Yes | Full name of the author or owner. |
description |
Multi-line text | Yes | Short summary or profile of the author (used as a description/bio). |
image |
File (image) | No | Profile photo or avatar of the author. |
title |
Single line text | No | Role or position, e.g. “Founder & CEO”. |
social_links |
List of links (one URL per line) | No | Social profiles such as LinkedIn, Instagram, X, etc. |
contact |
URL | No | Contact URL (e.g. contact page, mailto: link, or form URL). |
Now fill in your actual information in your Shopify dashboard > Contents > Metaobject > Author


Fill in your information:

This is where the magic happens. We're creating a custom section that pulls your author data and displays it beautifully with proper schema markup.

author-bio-schema (no spaces, no .liquid extension needed)
The file will not have any code in it. Copy and paste everything in that file with this code:
<div class="author-bio-section">
{% if section.settings.author %}
{% assign author = section.settings.author %}
<div class="author-bio-card">
{% if author.image.value %}
<div class="author-photo-wrapper">
<img src="{{ author.image.value | image_url: width: 300 }}" alt="{{ author.name.value | escape }}" class="author-photo">
</div>
{% endif %}
<div class="author-bio-content">
<h3 class="author-name">{{ author.name.value }}</h3>
{% if author.title.value != blank %}
<p class="author-title">{{ author.title.value }}</p>
{% endif %}
{% if author.description.value != blank %}
<p class="author-description">{{ author.description.value }}</p>
{% endif %}
{% if author.social_links.value != blank %}
<div class="author-social">
{% assign links = author.social_links.value | split: "\n" %}
{% for link in links %}
<a href="{{ link }}" target="_blank" rel="noopener" class="author-social-link">
{{ link }}
</a>
{% endfor %}
</div>
{% endif %}
{% if author.contact.value != blank %}
<p class="author-contact">
<a href="{{ author.contact.value }}" target="_blank" rel="noopener" class="author-contact-link">Contact</a>
</p>
{% endif %}
</div>
</div>
<!-- JSON-LD Schema -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Person",
"name": {{ author.name.value | json }},
"description": {{ author.description.value | json }}
{% if author.title.value != blank %},
"jobTitle": {{ author.title.value | json }}
{% endif %}
{% if author.image.value != blank %},
"image": {{ author.image.value | image_url: width: 600 | json }}
{% endif %}
{% if author.contact.value != blank %},
"url": {{ author.contact.value | json }}
{% endif %}
{% if author.social_links.value != blank %},
"sameAs": {{ author.social_links.value | split: "\n" | json }}
{% endif %}
}
</script>
{% endif %}
</div>
<style>
.author-bio-section {
width: 800px;
margin: 40px 0;
padding: 30px;
border-radius: 12px;
background: #f7f7f7;
}
.author-bio-card {
display: flex;
gap: 30px;
align-items: flex-start;
flex-wrap: wrap;
}
.author-photo-wrapper {
flex: 0 0 150px;
}
.author-photo {
width: 150px;
height: 150px;
object-fit: cover;
border-radius: 50%;
border: 3px solid #ddd;
}
.author-bio-content {
flex: 1;
max-width: 600px;
}
.author-name {
margin: 0 0 5px 0;
font-size: 26px;
font-weight: 700;
}
.author-title {
margin: 5px 0 15px;
font-size: 16px;
color: #777;
}
.author-description {
line-height: 1.6;
margin-bottom: 20px;
}
.author-social {
margin-bottom: 12px;
}
.author-social-link {
display: inline-block;
margin-right: 15px;
color: #0066cc;
font-size: 14px;
text-decoration: none;
}
.author-social-link:hover {
text-decoration: underline;
}
.author-contact-link {
font-weight: 600;
color: #333;
text-decoration: none;
}
.author-contact-link:hover {
color: #0066cc;
}
@media (max-width: 600px) {
.author-bio-section {
padding: 20px;
}
.author-bio-card {
flex-direction: column;
align-items: center;
text-align: center;
}
.author-photo-wrapper {
flex: 0 0 auto;
}
.author-bio-content {
max-width: 100%;
}
}
</style>
{% schema %}
{
"name": "Author Bio with Schema",
"settings": [
{
"type": "metaobject",
"id": "author",
"label": "Select Author",
"metaobject_type": "author"
}
],
"presets": [
{
"name": "Author Bio"
}
]
}
{% endschema %}
Now we'll add your author bio to appear automatically on every blog post. Navigate to your Online Store > Edit theme (Customize).

We want to add the author bio after the blog content but before the comments.

Finding Your Entry ID:
/12345678
YOUR_ENTRY_ID with that numberAdd "author-bio" to the order array where you want it to appear:
"order": [
"main",
"author-bio",
"related-posts"
]
The section includes basic styling. To customize colors, spacing, or fonts:
author-bio-schema.liquid section<style> tags#f7f7f7
26px
150px
50% to 8px
Cost savings: Most author bio apps charge $5-10/month. This costs nothing.
Theme independence: Apps often break when you switch themes. This metaobject approach is theme-agnostic and survives updates.
SEO benefits: The schema markup tells Google exactly who wrote the content, potentially increasing your authority signals.
Control: You own the code. No third-party dependencies, no surprise feature changes.
Performance: One less app means faster page loads and better Core Web Vitals scores.
Once your author bio is live, leverage it:
This isn't just about looking professional—it's about building authority signals that help your content rank and convert. Every blog post now reinforces who you are and why readers should trust you.
You've just implemented something most eCommerce stores either ignore or overpay for with apps. That's the difference between working harder and working smarter.
Quick answers to common questions about this topic