Install MetricMind on Laravel
Paste the MetricMind script tag into the <head> of your Blade layout and deploy. You'll usually want it inside @production.
Add the tag
Replace YOUR_SITE_ID with your site's ID. In MetricMind, open your site, then Settings → Setup. The ID is in the header of the Install it yourself panel, and the Script tag tab there shows the tag with your ID already filled in.
- Open the Blade file that holds your
<head>. It's oftenresources/views/components/layout.blade.phporresources/views/layouts/app.blade.php. With Inertia, it's the root template,resources/views/app.blade.php. - Paste the tag inside
<head>.@productionkeeps it out of your other environments.@production <script src="https://cdn.metricmind.si/mm.js" data-site="YOUR_SITE_ID" defer></script> @endproduction - Deploy.
@productiondepends onAPP_ENVbeingproductionon that server.
Check that it works
- Open your live site in a normal browser window, with ad blockers off, and load a page or two.
- In MetricMind, open your site's Settings → Setup page. The panel at the top says Waiting until the first page view arrives, then Live. It usually takes under a minute. Reload the page if it hasn't changed.
Still on Waiting?
- An ad blocker in your browser. Some block analytics. Test with extensions off.
- A different address. Events are accepted from the domain you registered in MetricMind, its
www.version and its subdomains. To test on another address, such as your platform's free or staging domain, add it under Settings → Security → Allowed origins. - Local testing. The script ignores
localhostand private addresses, so test on the live site. - The tag didn't arrive. View your page's source and search for
mm.js. If it's there, open your browser's developer tools:[MetricMind] Missing data-sitein the Console means the tag lost its ID, and in the Network tab/v1/batchshould answer 202.
What goes wrong on Laravel
More than one layout
Many apps have one layout for signed-in pages and another for guests. A tag in only one of them leaves the other pages uncounted, so add it to each, or move it to a partial and @include it.
Livewire and Inertia page changes
Keep the tag in <head>. Page changes with wire:navigate and Inertia don't reload the page, and mm.js counts them by following browser history. Livewire runs a head script that's on both pages only on the first visit, so it isn't loaded twice.
A Content Security Policy with a nonce
Laravel adds your nonce only to the tags it generates, so add it to this tag yourself with nonce="{{ Vite::cspNonce() }}". Also allow in.metricmind.si in connect-src, and cdn.metricmind.si in script-src unless you use 'strict-dynamic'.
Privacy
MetricMind sets no cookies and builds no profiles. In the EU, storing an ID on the device can need consent even without cookies, so for the strictest reading turn on storage-free mode (data-storage="none"), which stores nothing in the browser. Your obligations depend on your jurisdiction and the rest of your stack, so check with your counsel.
To turn on storage-free mode, add data-storage="none" to the tag before defer. What changes in that mode.
Next
- To leave out your own visits, open
https://yoursite.com/?mm_optout=1once in each browser you use (=0turns it back on). - Page views, sources, contact clicks, site search, Web Vitals and errors are collected without more setup. To count your own actions, see events.
Sources
The steps and plan rules come from these pages, as of November 2026. Platforms change their menus, so tell us if something has moved.