Blazor sind vier verschiedene Hosting-Anordnungen unter einem Namen, und das Snippet gehört bei jeder in eine andere Datei. Die Regel darunter ist dieselbe: Es gehört in die Hülle, die die Navigation übersteht, nie in eine Seite.
Diese Website ist eine Blazor-Anwendung, und sie wird auf genau diese Weise von Skomi gemessen.
Holen Sie sich zuerst das Snippet aus Ihrem Dashboard:
<script src="https://t.skomi.com/s/YOUR-SITE-ID.js" defer></script>
Wohin es gehört
| Ihr Projekt | Datei | Wo darin |
|---|---|---|
| Blazor Web App (.NET 8+) | Components/App.razor | In <body>, nach <Routes /> |
| Blazor WebAssembly eigenständig | wwwroot/index.html | In <body>, vor dem Framework-Skript |
| Blazor Server (.NET 6/7) | Pages/_Host.cshtml oder Pages/_Layout.cshtml | In <body> |
| MAUI Blazor Hybrid | entfällt | Nicht diese Anleitung: Das ist eine App, siehe Installation in MAUI |
Bei einer Blazor Web App sieht das so aus:
<body>
<Routes />
<script src="https://t.skomi.com/s/YOUR-SITE-ID.js" defer></script>
<script src="_framework/blazor.web.js"></script>
</body>
Warum nicht in ein Layout oder eine Seite
⚠ Ein von der erweiterten Navigation eingefügtes Skript wird nicht ausgeführt. Blazor flickt das DOM, statt das Dokument neu zu laden, und ein <script>-Tag, das als Teil dieses Flickens ankommt, läuft nicht. Ein Snippet in MainLayout.razor oder in einer Seitenkomponente funktioniert also beim ersten Laden, ist nach der ersten internen Navigation still tot und sieht die ganze Zeit installiert aus.
App.razor liegt außerhalb von allem, was Blazor ersetzt. Das Tag lädt einmal und bleibt geladen.
Die Navigation wird für Sie gezählt
Je nachdem, ob Sie die Blazor-Laufzeit ausliefern, geschehen zwei verschiedene Dinge, und beide sind bereits abgedeckt.
Mit blazor.web.js. Interne Links nutzen die erweiterte Navigation: Das Dokument bleibt bestehen, und die Adresse ändert sich über history.pushState. Skomis Skript umhüllt pushState und replaceState und hört auf popstate, jedes davon ist also ein Seitenaufruf. Nichts zu abonnieren, nichts bei der Navigation aufzurufen.
Ohne sie. Eine statisch gerenderte Blazor-Anwendung ohne Interaktivität liefert überhaupt keine Laufzeit aus, jeder Link ist also ein gewöhnlicher Seitenaufruf und zählt wie bei jeder anderen Website. Diese Website ist dieser Fall.
Sie müssen nicht wissen, welcher von beiden Sie sind: Dasselbe Tag an derselben Stelle ist für beide richtig.
⚠ Eine Navigation, die die Adresse nicht ändert, wird nicht gezählt, in keinem der beiden Modi. Reiterleisten, Akkordeons und Filteränderungen ohne Query sind Interaktionen, keine Seitenaufrufe. Wenn Sie sie gemessen haben wollen, senden Sie ein Ereignis.
Interaktive Rendermodi ändern hier nichts
InteractiveServer, InteractiveWebAssembly und InteractiveAuto entscheiden, wo Ihre Komponenten laufen, nicht, wie die Seite an den Browser geliefert wird. Das Snippet sitzt über alldem in App.razor und verhält sich unter jedem gleich. Rendermodi je Komponente sind ebenso unerheblich; es gibt ein Dokument und ein Skript.
Wenn nichts ankommt
- Steht das Tag in
App.razorstatt in einem Layout? Siehe die Warnung oben; das ist der Fehler, für den es diese Anleitung gibt. - Steht es in
<body>? In<head>funktioniert es auch, aber halten Sie es<HeadOutlet />aus dem Weg: dieser Outlet ist für Inhalte, die Komponenten beisteuern, und ein Tracker ist keiner davon. dotnet watchund ein zwischengespeichertes Dokument. Erweiterte Navigation und Hot Reload können dazu führen, dass Sie eine Seite ansehen, die gebaut wurde, bevor Sie das Tag hinzugefügt haben. Einmal hart neu laden.- Localhost wird nicht gezählt. Liefern Sie aus oder testen Sie gegen einen echten Hostnamen.
Siehe das Snippet dazu, was es tut, sobald es geladen ist, und eine App messen, wenn das, was Sie messen, installierte Software ist statt einer besuchten Website.