Sergio Xalambrí

Use Fathom with Remix

If you want to use Fathom for your analytics and use Remix to build your app, you can configure it to work quite quickly.

Install Fathom Client:

npm install fathom-client

Then in your app/root file, import it together with useLocation from React Router.

import * as Fathom from "fathom-client";
import { useLocation } from "react-router-dom";

Finally, in an effect run Fathom.load and also Fathom.trackPageview(); after a location change.

let fathomLoaded = useRef(false);
let location = useLocation();

useEffect(
 function setupFathom() {
 if (!fathomLoaded.current) {
 Fathom.load("<YOUR_SITE_ID>", { includedDomains: ["<YOUR_DOMAIN>"] });
 fathomLoaded.current = true;
 } else {
 Fathom.trackPageview();
 }
 },
 [location]
);

With this, the first time the effect runs, it will load Fathom and set in the fathomLoaded ref the value true. From that moment, whenever the location object changes, it will call Fathom.trackPageview to track the pageview.

And that's it! This also works in any React Router application; to be honest, you don't even need Remix here.