GetSimple CMS is a flat-file PHP CMS that stores all content in XML files. With no database and a minimal plugin system, analytics issues on GetSimple trace to a small number of causes: theme template structure, plugin hook execution order, and the flat-file caching system. The platform's simplicity makes debugging straightforward once you know where to look.
GetSimple-Specific Debugging Approach
GetSimple stores all data as XML files in the data/ directory. You can inspect the state of the entire site by reading files on disk.
Check Theme Template Structure
# SSH into your GetSimple server
# Find the active theme
cat data/other/website.xml | grep -i "TEMPLATE\|THEME"
# Check if the theme calls the required hooks for plugin script injection
THEME=$(grep -oP '<TEMPLATE>\K[^<]+' data/other/website.xml)
grep -n "get_header\|get_footer\|return_header\|return_footer" theme/$THEME/*.php
Verify Analytics in Rendered Output
# Check the live output
curl -s http://your-getsimple-site.com/ | grep -iE "gtag|gtm|analytics" | head -5
# If empty, check if the theme even outputs <head> content properly
curl -s http://your-getsimple-site.com/ | grep -c "</head>"
Most Common GetSimple Analytics Issues
1. Theme Missing Header/Footer Hooks
Symptoms: Analytics plugin is active but no tracking code appears in the rendered page.
Root cause: GetSimple plugins inject code via theme hooks. The theme must call get_header() and get_footer() (or their equivalents) for plugins to execute.
Fix: Check and update your theme's template:
<?php
// In theme/your-theme/template.php (or similar)
?>
<!DOCTYPE html>
<html>
<head>
<title><?php get_page_title(); ?></title>
<?php get_header(); ?> <!-- THIS MUST BE PRESENT for plugin head injection -->
</head>
<body>
<?php get_page_content(); ?>
<?php get_footer(); ?> <!-- THIS MUST BE PRESENT for plugin footer injection -->
</body>
</html>
2. Manual Code Injection via Components
Symptoms: You added analytics code to a GetSimple component but it does not render on all pages.
Root cause: GetSimple components must be explicitly included in the theme. If the theme does not call the component, it never renders.
Fix: Create a component via Edit > Components, then ensure your theme includes it:
<!-- In your theme template -->
<head>
<?php get_header(); ?>
<?php get_component('analytics'); ?> <!-- Include your analytics component -->
</head>
Or inject directly into the theme template for guaranteed execution:
<head>
<?php get_header(); ?>
<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>
3. GetSimple Cache Serving Old Pages
Symptoms: Updated tracking code or component content does not appear on the live site.
Root cause: GetSimple caches rendered pages in the data/cache/ directory. Cached files persist until explicitly cleared.
Fix:
# Clear the GetSimple cache
rm -rf data/cache/*
# Or via admin: Support > Clear Cache (if available in your version)
# Or simply edit and re-save any page to trigger a cache rebuild
4. Plugin Execution Order Conflicts
Symptoms: Analytics plugin active but another plugin's JavaScript error prevents it from executing. Console shows errors from non-analytics plugins.
Root cause: GetSimple loads plugins alphabetically by filename. If a plugin that loads before yours has a JavaScript error, it can halt subsequent script execution.
Diagnosis:
# Check plugin loading order
ls -1 plugins/
# Files starting with 'a' load before 'g' (google-analytics)
// In browser console, check for JS errors
window.onerror = function(msg, url, line) {
console.log('Error:', msg, 'at', url, 'line', line);
};
Fix: Rename your analytics plugin file to load first (e.g., 00_analytics.php), or fix the broken plugin.
5. .htaccess Fancy URL Routing Intercepting Requests
Symptoms: Analytics tags load but collection endpoint requests fail. Network tab shows 404 or redirect errors on analytics beacons.
Root cause: GetSimple's fancy URL .htaccess rules route all requests through index.php. This can intercept outgoing analytics beacon requests if the server is misconfigured.
Fix: Ensure your .htaccess excludes analytics endpoints:
# Add before GetSimple's rewrite rules
RewriteCond %{REQUEST_URI} !^/collect
RewriteCond %{REQUEST_URI} !^/j/collect
RewriteCond %{REQUEST_URI} !^/g/collect
Environment Considerations
- No database: GetSimple's flat-file approach means no database debugging. All data is in XML files under
data/ - PHP version: GetSimple requires PHP 5.3+ but works best on PHP 7.x. PHP 8.x compatibility varies by version and plugins
- Shared hosting: GetSimple is designed for shared hosting. No CLI tools or Composer — everything managed via FTP and admin panel
- File permissions: The
data/directory must be writable by the web server. Permission issues cause silent failures in cache and configuration saves - Small ecosystem: GetSimple has a limited plugin library. Most analytics integrations are manual theme edits
Performance Issues
- LCP Issues - XML file parsing overhead and theme rendering latency
- CLS Issues - Layout shifts from plugin-injected elements and component loading
Tracking Issues
- Events Not Firing - Debug theme hook gaps, component inclusion, and cache staleness
Related Resources
- GetSimple CMS documentation
- Global Issues Hub for platform-agnostic solutions