HyperMosaicHyperMosaic

How to Edit Default Theme Content in Shopify (and Add Your Own)

Shopify lets you change repeated wording across your whole store from one screen. Here's how to use it — and how to add your own custom fields with a few lines of Liquid.

How to Edit Default Theme Content in Shopify (and Add Your Own)

Shopify gives you a way to change repeated wording across your whole store from one screen — turning "Cart" into "Shopping Bag", or "Sold Out" into "Unavailable" — without touching a single template. It lives under Edit default theme content in your admin.

What far fewer merchants realize is that you can add your own entries to that screen. Any text you find yourself repeating — store hours, a shipping cutoff, a returns window, a phone number — can become a single field that you edit in one place and that updates everywhere it appears.

This guide covers both: using the built-in editor, and extending it with your own content using a few lines of Liquid.

What "Edit default theme content" actually is

Every Shopify theme ships with locale files — JSON files holding the text the theme displays. There are two kinds, and confusing them is the most common source of frustration here:

  • Storefront locale files (en.default.json) hold customer-facing text — button labels, cart headings, form messages. This is what "Edit default theme content" edits.
  • Schema locale files (en.default.schema.json) hold the labels you see inside the theme editor — section names and setting descriptions. Customers never see these.

If you edit the wrong file, your change either won't appear on the storefront or won't appear in the editor. When in doubt: customer sees it, use en.default.json.

How the file is organized

Storefront locale files nest three levels deep — category, group, then the key itself:

{
  "category": {
    "group": {
      "description": "the text that gets displayed"
    }
  }
}

So a real entry looks like this:

{
  "products": {
    "product_loop": {
      "view_details": "View Product Details"
    }
  }
}

And you output it in Liquid with the translation filter:

{{ 'products.product_loop.view_details' | t }}

That three-part path is the whole mechanism. Once it clicks, the rest follows.

Changing wording that already exists

If you only want to rename something the theme already says, you don't need code at all. In your Shopify admin, go to Online Store → Themes, open the menu next to your theme, and choose Edit default theme content. Search for the phrase, change it, save.

This is the right tool for renaming "Cart" to "Bag", softening "Sold Out", or rewording a form label. Changes here survive theme updates in a way that editing templates directly does not.

Adding your own default theme content

Now the useful part. We'll add universal store hours that can be edited from the Theme Content settings — so when your hours change, you update them once and every instance across the site follows.

This example modifies the Dawn theme, but the technique is identical in any theme.

Step 1: Add your key to en.default.json

From the Shopify admin, go to Online Store → Themes, then Edit code. In the Locales folder, open en.default.json — the search box will find it fastest.

We'll add store hours under the general category so it's easy to find. You can use whichever category fits best; the grouping is for your own sanity, not a technical requirement.

{
  "general": {
    "store_hours": {
      "store_hours_html": "Mon-Fri 10:00 AM - 6:00 PM<br>Sat-Sun 9:00 AM - 5:00 PM"
    },
    "password_page": {
      "login_form_heading": "Enter store using password:",
      "login_password_button": "Enter using password"
    }
  }
}
Adding a store_hours key to en.default.json in the Shopify code editor

Save, then return to Edit default theme content in your admin. Your new field is there, editable by anyone on your team without going near the code again.

The new store hours field showing in Edit default theme content in the Shopify admin

Why the _html suffix matters

Notice the key is store_hours_html, not store_hours. That suffix is not decoration.

By default, Shopify escapes translated text — HTML characters are converted to entities and displayed literally. So this:

"announcement": "Get <strong>FREE</strong> shipping"

renders on the page as the literal text Get <strong>FREE</strong> shipping — tags and all. Add the suffix:

"announcement_html": "Get <strong>FREE</strong> shipping"

and the markup renders properly. That's why our store hours use _html — it's what allows the <br> to create an actual line break instead of printing as text.

Use _html only when you genuinely need markup. Escaping is a safety feature, and turning it off on a field anyone can edit means a stray tag can break your layout.

Step 2: Output it anywhere in your store

The hard part is done. Paste this snippet wherever you want the hours to appear:

{{ 'general.store_hours.store_hours_html' | t }}

You can drop it into a template directly, or — without touching code — add a Custom Liquid block in the theme editor and paste it there.

Pasting the Liquid translation snippet into a Custom Liquid block

And the result. Change the hours once in Theme Content, and every instance updates — storefront and email templates alike.

Store hours rendering on the live storefront from the default theme content field

Two techniques worth knowing

Inserting variables

Locale strings can accept values passed in from Liquid, which is useful for anything personalized:

{
  "layout": {
    "header": {
      "hello_user": "Hello {{ name }}!"
    }
  }
}
{{ 'layout.header.hello_user' | t: name: customer.first_name }}

Pass several by separating them with commas.

Handling singular and plural

Rather than writing "1 item(s)", Shopify will pick the right form for you. Provide the variants and pass a count:

{
  "customers": {
    "orders": {
      "order_count": {
        "one": "You've made {{ count }} order with us",
        "other": "You've made {{ count }} orders with us"
      }
    }
  }
}
{{ 'customers.orders.order_count' | t: count: customer.orders_count }}

Shopify selects the correct variant using the active language's rules — which matters more than it sounds if you ever sell in a language whose plural rules differ from English.

Common problems

The key renders as literal text like translation missing: en.general.store_hours. The path doesn't match the file. Check all three levels and your spelling — this is almost always a typo, not a bug.

Your HTML shows as tags on the page. The key is missing the _html suffix, or the snippet references the name without it.

The field doesn't appear in the admin. Your JSON is probably invalid — one trailing comma is enough. Paste the file into a JSON validator before hunting further.

Your changes vanished after a theme update. This is the big one. Updating a theme can replace locale files, taking your custom keys with them. Keep a copy of your additions somewhere outside the theme, and re-check after every update. If you're on a theme that updates frequently, this is a real maintenance cost worth planning for.

When to use something else

Default theme content is the right tool for short, repeated strings. It's the wrong tool for a few things:

  • Content attached to a specific product or collection — use metafields, which belong to the record rather than the theme.
  • Anything a merchant should arrange visually — use theme settings and sections, so it's editable in the theme editor with a live preview.
  • Long-form content — use a page or a blog post. Locale files are not a content management system.

The rule of thumb: if it's a phrase that repeats, it belongs here. If it's content that belongs to a thing, it belongs to that thing.

Getting help with your store

Techniques like this are the difference between a store you fight and one you can actually run. If you're setting up a new storefront, our guide to picking a Shopify theme covers the decision that comes first.

We build and optimize Shopify storefronts — custom sections, speed work, and the Klaviyo flows that run alongside them. If you'd like a hand with yours, get in touch.

Last reviewed August 2026 against current Shopify theme architecture.

Want to read more?

Explore more insights and resources on our blog.