---
slug: single-page-app
title: "How do I measure a single-page app?"
category: installation
locale: en
updated: 2026-10-12
keywords: ["SPA","single page app","React","Vue","Next.js","router","page"]
questions: ["What do I do if route changes without a reload are not counted?","React Router tracking","SPA page views","Integrate with Vue or Next.js"]
url: https://bench.metrunio.com/en/help/single-page-app
---

# How do I measure a single-page app?

**What do I do if route changes without a reload are not counted?**

With automatic page views (autoPageviews, on by default) the SDK also counts route changes without a reload: it notices every address change through pushState, replaceState and the back button. Call metrunio.page() yourself only if your router switches views without changing the address, or if you have turned autoPageviews off.

1. Include the snippet or GTM tag once in your layout, as usual.
2. Leave autoPageviews on. The SDK then measures the first page view and every further one where the address changes.
3. If your router switches views without changing the address, call metrunio.page() there. With autoPageviews on, do not also call it on every address change: the same page view could then count twice.
4. Keep reporting conversions through metrunio.conversion() or server-side.
5. Report funnel steps of an application through metrunio.goal(), after a single metrunio.identify() at sign-in and not on every route change. A second call of the same step does not count again.

> **Caution:** Do not call init() again on every route change. The SDK then reports DOUBLE_INIT. One init call per page load is enough.

## Also asked

- React Router tracking
- SPA page views
- Integrate with Vue or Next.js

## Related

- https://bench.metrunio.com/en/help/sdk-api
- https://bench.metrunio.com/en/help/snippet-einbauen
- https://bench.metrunio.com/en/help/funnel-schritte-einbauen
