Install guide
Add website analytics to Shopify
One tag in theme.liquid. Checkout is the part worth reading about.
The tag goes in layout/theme.liquid, just before </head>.
<script defer src="https://app.feasible.lol/js/fs-k7m2q4x5r3n6t2v5.js"></script>Steps
- From your Shopify admin, go to Online Store.
- Click the ⋯ menu next to your live theme and choose Edit code.
- Under Layout, open
theme.liquid. - Paste the tag immediately before
</head>. - Save.
Check the result on your live storefront, not in the theme editor’s preview pane.
Checkout is a different surface
Your theme doesn’t render checkout. Shopify does, on its own pages, and those pages don’t include your theme’s code. So checkout and post-purchase pages won’t appear in your pages report, on any plan.
Below Shopify Plus, that isn’t something you can change. Shopify’s documentation puts checkout-page apps and the Checkout Branding API on Plus only (checked September 3, 2026); everyone else gets branding controls and nothing that injects a script.
What this costs you is less than it sounds. You still see every product page, collection and cart, every source and campaign that brought the visit, and - if you set up a revenue goal - the money, credited back to the source that started the visit rather than to Shopify Payments.
What Shopify hides
Themes are copies. The tag lives in one theme’s theme.liquid. Duplicate the theme, install a new one, or restore a backup, and the new theme doesn’t have it. This is the single most common way a Shopify store loses tracking: someone publishes a redesign on a Friday and the numbers die quietly on Saturday.
A theme update overwrites the file. If you take an update to a theme like Dawn rather than a fresh install, re-check theme.liquid afterwards.
Preferences has a Google Analytics box. Don’t use it. Online Store → Preferences has a field for a Google Analytics property. It isn’t a general “paste any script here” field, and it isn’t where this goes.
Password-protected stores
Check it worked
Open your live storefront in a normal browser window - not the theme editor - and click through two or three products. Then open Feasible.
You should show up under Real-time visitors. If you don’t, go to Site settings → Ingestion health. It counts every event that arrived and every one that was dropped, each with a named reason - unknown_site means the snippet is for a site you haven’t registered, hostname_not_allowed means the page is on a hostname that isn’t on your list. That last one is worth knowing about here: yourstore.myshopify.com and yourstore.com are different hostnames, and the health panel has a one-click action to allow whichever one you’re testing on.
The send a test event button posts through the real public URL, so it exercises what a browser does. A brand-new site takes about fifteen seconds before its first event is accepted, so give it that.
Also on template-editing platforms: WordPress and Ghost. The general case is in the install docs.
Sources: Shopify - Edit theme code and Shopify - Checkout extensibility, checked September 3, 2026.