Sitefinity is a .NET-based CMS from Progress (formerly Telerik) with a widget-based page composition model, a built-in analytics module (Sitefinity Insight), and multi-site management. Analytics issues on Sitefinity typically involve the output cache serving pages without recently added tracking code, conflicts between the built-in Sitefinity Insight and third-party analytics, or the page lifecycle in .NET not executing scripts in the expected order.
Sitefinity-Specific Debugging Approach
Sitefinity's .NET architecture means debugging often involves IIS and the ASP.NET pipeline, not just browser-side inspection.
Check Sitefinity's Built-in Analytics
// In browser console, check for Sitefinity Insight (built-in analytics)
console.log('Sitefinity Insight:', document.querySelector('script[src*="insight"]') ? 'Active' : 'Not found');
console.log('SF tracking:', typeof _sf_async_config !== 'undefined' ? 'Active' : 'Not found');
// Check for third-party analytics
document.querySelectorAll('script[src*="gtag"], script[src*="gtm"]').forEach(s => {
console.log('Analytics:', s.src);
});
Verify Output Cache Status
# Check IIS output cache headers
curl -sI "https://your-sitefinity-site.com/" | grep -iE "cache-control|x-cache|age|expires"
# Check if Sitefinity's output cache is active
# In Sitefinity admin: Administration > Settings > Advanced > System > Output Cache Settings
Check .NET Event Logs
# On the Sitefinity server (Windows)
Get-EventLog -LogName Application -Source "Sitefinity" -Newest 20 | Format-Table TimeGenerated, Message -AutoSize
# Or check the Sitefinity log file
Get-Content "C:\inetpub\wwwroot\SitefinityApp\App_Data\Sitefinity\Logs\Error.log" -Tail 50
Most Common Sitefinity Analytics Issues
1. Sitefinity Insight Conflicting with GA/GTM
Symptoms: Double tracking, unexpected events, or JavaScript errors from competing analytics scripts.
Root cause: Sitefinity includes its own analytics product (Sitefinity Insight, formerly Sitefinity DEC). When enabled, it injects its own tracking script alongside any manually-added GA or GTM.
Fix: Either use Sitefinity Insight OR third-party analytics:
# To disable Sitefinity Insight:
# Sitefinity admin > Analytics > Insight > Settings > Disable tracking
# Or remove the Insight script widget from your page templates
2. Output Cache Serving Stale Pages
Symptoms: Analytics code added to a widget or layout but not appearing on the live site. Appears after restarting the application pool.
Root cause: Sitefinity's output cache stores rendered HTML. After adding tracking code, the cache still serves the pre-change HTML until it expires or is invalidated.
Fix:
# Clear Sitefinity output cache
# In Sitefinity admin: Administration > Settings > Advanced > System > Output Cache Settings > Clear Cache
# Or restart the IIS application pool
Import-Module WebAdministration
Restart-WebAppPool -Name "SitefinityAppPool"
# Or via IIS Manager:
# Right-click application pool > Recycle
3. Master Page / Layout Template Not Including Scripts
Symptoms: Analytics works on pages using one layout template but not on pages using a different template.
Root cause: Sitefinity uses layout templates (master pages in .NET terms). If analytics is placed in one layout template via a Script widget but not in all templates, pages using other layouts are untracked.
Fix: Add analytics to the base layout that all page templates inherit:
<%-- In your base layout template (.master file or Razor layout) --%>
<head runat="server">
<asp:ContentPlaceHolder ID="head" runat="server" />
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-XXXXXXX');
</script>
</head>
Or use Sitefinity's Script widget placed in every layout template's head section.
4. Personalized Pages Fragmenting Analytics
Symptoms: Same URL shows different analytics data. Custom dimensions capture different values for the same page.
Root cause: Sitefinity's personalization engine serves different widget variations to different audience segments. Each variation may push different dataLayer values.
Fix: Normalize tracking and add personalization as a custom dimension:
// Detect Sitefinity personalization
var sfSegment = document.querySelector('[data-sf-segment]')?.dataset.sfSegment || 'default';
gtag('config', 'G-XXXXXXX', {
custom_map: { dimension2: 'personalization_segment' }
});
gtag('event', 'page_view', { personalization_segment: sfSegment });
5. Multi-Site Manager Sites Missing Tracking
Symptoms: Analytics works on the primary site but not on sub-sites managed through Sitefinity's multi-site feature.
Root cause: Each Sitefinity site can have its own templates and widgets. If analytics was only configured on the primary site, sub-sites are untracked.
Fix: Configure analytics for each site in the multi-site manager, or create a shared layout widget that all sites reference.
Environment Considerations
- IIS hosting: Sitefinity runs on IIS/.NET. Server-side debugging requires Windows server access and PowerShell
- Sitefinity Cloud vs on-premises: Sitefinity Cloud has managed infrastructure with limited server access. On-premises gives full control
- NuGet packages: Sitefinity extensions are distributed via NuGet. Package conflicts can cause site-wide failures
- .NET version: Sitefinity versions target specific .NET Framework versions. Check compatibility before installing analytics-related NuGet packages
- Staging/Live workflow: Sitefinity supports content approval workflows. Ensure analytics configuration changes are published through the workflow
Performance Issues
- LCP Issues - .NET page lifecycle rendering and output cache miss latency
- CLS Issues - Layout shifts from widget rendering, personalization variant swaps, and deferred script loading
Tracking Issues
- Events Not Firing - Debug Sitefinity Insight conflicts, output cache, and multi-site template configuration
Related Resources
- Sitefinity documentation
- Global Issues Hub for platform-agnostic solutions