Troubleshooting
Common reasons Muro looks broken, and how to fix each one in under a minute.
If Muro isn't doing what you expect, almost every problem falls into one of the cases below. This page lists each one with a quick diagnosis and the fix.
"I installed the script but no events show up"
The most common one. Walk through these in order.
Open DevTools and look for the request
Open your site in a browser, open DevTools, switch to the Network tab, filter for collect, and reload. You should see:
- A
POSTtohttps://api.muroanalytics.com/collect - A
204 No Contentresponse
If you see the request and a 204, Muro is collecting fine. Move on to "I see the request but no data in the dashboard."
If you don't see the request at all:
- View the page source and confirm the
<script>tag is actually there. A common mistake is pasting it into a CMS preview but not publishing. - Confirm
data-project-idhas your real project ID, not the placeholderYOUR_PROJECT_ID. - Check the Console tab for errors. If you see "Refused to load the script," see the CSP section below.
- Check that you're not on an ad blocker. See the ad blocker section.
If you see the request but a 400 response:
The project might be paused. Open the dashboard and check Settings → Project → Tracking active. Flip it back on.
If you see the request but a 404 response:
The project ID in your snippet doesn't exist or was deleted. Copy the snippet again from Settings → Project → Tracking script.
I see the request but no data in the dashboard
Two things can cause this:
- Time range mismatch. The default is "Past 7 days" but you just installed, so set the time picker to Live and reload your site in another tab. Your visit should appear within 30 seconds.
- Project filter. If you have multiple projects, make sure the project switcher in the top nav is pointed at the right one.
Ad blockers
A small percentage of visitors run ad blockers that include muro.js in their blocklist. Those visits will not be captured. There's nothing you can do about this and it's normal. Industry-wide, expect 2 to 10% of traffic to be invisible to any analytics tool.
You don't need to "fix" this. Just be aware that your numbers will be slightly lower than your server logs.
Content Security Policy (CSP)
If you have a Content-Security-Policy header on your site, the browser will block muro.js from loading or from sending events unless you allow the Muro domain.
Add these to your CSP:
script-src 'self' https://api.muroanalytics.com;
connect-src 'self' https://api.muroanalytics.com;If you also have default-src, the more specific script-src and connect-src directives override it for those resource types.
Common signs you have a CSP issue:
- The Console tab shows "Refused to load the script 'https://api.muroanalytics.com/muro.js' because it violates the following Content Security Policy directive."
- Or: "Refused to connect to 'https://api.muroanalytics.com/collect' because it violates..."
Single-page apps and missing pageviews
Muro tracks SPA navigation automatically by listening for history.pushState and popstate. This covers Next.js, Vue Router, React Router, Astro view transitions, and pretty much every other modern framework.
A few cases where this can break:
- You're using
history.replaceStatefor navigation. Muro deliberately ignoresreplaceStateso frameworks like Next.js don't double-count the initial pageview on hydration. If your framework actually usesreplaceStatefor real navigations (unusual), it won't be tracked. The fix is to callwindow.muro.track('pageview')manually after the route change, or usepushStateinstead. - You're using a router that doesn't touch
historyat all. Hash-based routers and custom in-memory routers won't trigger Muro. Callwindow.muro.track('pageview')after each route change.
Localhost doesn't show a country or referrer
When you develop on localhost, requests don't have a referring site and Cloudflare can't resolve a country. Those fields will be blank in the dashboard for those events.
This is expected and harmless. Real visitor data from production will have those fields populated normally.
"muro is not defined" in the console
The window.muro object is added by muro.js once the script loads. If you see this error, the script hasn't loaded yet at the time your code ran.
Two common causes:
- Your code is in
<head>and runs synchronously, beforemuro.jsfinishes loading. Move the code that useswindow.muroto fire after the page is interactive, or defer it. - Your CSP is blocking
muro.js. See above.
If window.muro is genuinely undefined and you're sure the script is loading, defensive code helps:
if (typeof window !== 'undefined' && window.muro) {
window.muro.track('signup');
}Bounce rate is much higher than expected
A "bounce" is a session with exactly one pageview. If your bounce rate is suspiciously high, the most common reasons are:
- Single-page landing pages. If a page has no internal links, every visit is a bounce by definition. That's correct.
- Bot traffic. Crawlers visit one page and leave. They count as bounces.
- Your tracker isn't firing on SPA navigation. See the SPA section above.
Bounce rate is calculated from sessions, not pageviews. A visitor who reads one page for 10 minutes still counts as a bounce.
Numbers look different from another tool
Muro's numbers won't match Google Analytics, Plausible, or your server logs exactly. That's normal across every analytics tool. Different tools count differently:
- Different bot filtering. Each tool has its own bot list.
- Different session timeouts. Muro uses 30 minutes. Some tools use 25, some use an hour.
- Different ad blocker reach. Each tool is on different blocklists.
- Different sampling. Muro doesn't sample, but some tools do at high volumes.
If two analytics tools agree to within 10 to 15%, that's typically considered a clean install. Pursuing exact matches is rarely worth the time.
Still stuck?
If none of these match what you're seeing, write to support@muroanalytics.com with:
- Your project ID
- The URL where the snippet is installed
- A screenshot of the Network tab showing what's happening on the
/collectrequest
We respond within a business day.