Platforms and no-code
Where each builder hides its custom-HTML box, and where the catch is.
Everywhere below, SNIPPET means:
<script
defer
data-site="tkb_a1b2c3d4"
data-domain="example.com"
src="https://stats.example.com/js/tkb_a1b2c3d4.js">
</script>npx trckable init sets up Next.js and React apps itself, and adds the tag to
plain HTML, SvelteKit, Astro and Nuxt pages. For everything else, the page for
your platform below has the exact steps.
WordPress
Appearance → Theme File Editor → header.php, before </head>. A theme update
will overwrite it, so a child theme or a small plugin is safer:
<?php // functions.php of your child theme
add_action('wp_head', function () { ?>
<script
defer
data-site="tkb_a1b2c3d4"
data-domain="example.com"
src="https://stats.example.com/js/tkb_a1b2c3d4.js">
</script>
<?php });Shopify
Online Store → Themes → Edit code → layout/theme.liquid, before </head>.
Checkout pages on Basic plans are not yours to edit, so the purchase itself is
recorded by the payment webhook rather than by the script —
which is more reliable anyway.
Webflow
Project settings → Custom code → Head code. Publish afterwards; custom code does
not appear on the webflow.io preview domain.
Framer
Site settings → General → Custom code → Start of <head> tag.
Squarespace and Wix
Squarespace: Settings → Advanced → Code injection → Header. Wix: Settings → Custom code → Add code to Head, on all pages.
Ghost
Settings → Code injection → Site header.
Astro, Hugo, Docusaurus, Jekyll
Put the snippet in the shared layout — src/layouts/Layout.astro,
layouts/partials/head.html, docusaurus.config.js under scripts, or
_includes/head.html.
Google Tag Manager
Create a Custom HTML tag with the snippet, and trigger it on Initialization — All Pages so it runs before anything else.
GTM is itself a large script and a common thing to block. If you are adding trckable through GTM only because that is the pipe you have, the script tag on the page is lighter and more reliable.
Lovable, Bolt, v0, Replit
These generate React. Use the npm package — it is bundled into the app, so there is no extra request at all.
Electron, Tauri and PWAs
A PWA on your site's domain counts like any page: the npm package or the tag.
An Electron or Tauri window loads file:// or localhost, which trckable does
not count, so send those screens from your backend through the
HTTP API.
Anything not listed
If it lets you paste HTML into the head, it works. If it does not, the npm package works. If neither, the HTTP API takes events from your server.
Landing page and app
A plain HTML landing page on example.com and a Next.js app on app.example.com, as one site: one visitor, one journey, and the sale credited to what brought them.
Reports
What each number means, and how it was worked out. Core is one screen; Full is the same page with everything on it.