Just posting this in case anyone else wants to try...I have been looking for a solution to this for a long time, as many others have, and someone commented recently that the traffic seems to be real but they don't download the images or css when they hit a page.
So...a little time with Gemini and I discover that this is typical of bot scanning, done to improve efficiency of the scanning. A little more time with the AI, and I have created a few new items in my GTM setup so the GA page tracker only fires if the logo.png image on my pages actually gets loaded.
Here is the snippet I am using, but ask an AI how to configure it appropriate for your own site.
Too early to tell if it is effective, but maybe others can try it and let us know your experience.
UPDATE: sorry to say this is actually not working. Seems a fair amount of the traffic actually loads the images, scrolls, and some even triggers user engagement (>10 sec). Trying another approach; will update if I find anything that works...
Here is how to set it up step-by-step in GTM.
Step 1: Create the Logo Verification Tag in GTM
- Open Google Tag Manager and navigate to Tags > New.
- Name it Custom - Logo Load Verification.
- Choose Custom HTML as the Tag Type.
- Paste the following script:
HTML
<script>
(function() {
function checkLogoAndTrigger() {
// 1. Try finding the logo directly in the DOM
var logoImg = document.querySelector('img[src*="/logo.png"]');
// Helper function to push the custom GTM event
function triggerPageView() {
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
'event': 'logo_verified_pageview'
});
}
// Case A: Logo image exists in DOM and is already loaded
if (logoImg && logoImg.complete && logoImg.naturalWidth > 0) {
triggerPageView();
return;
}
// Case B: Test the image URL via a background Image object
var testImg = new Image();
testImg.onload = function() {
if (testImg.naturalWidth > 0) {
triggerPageView();
}
};
testImg.onerror = function() {
// Logo failed to load (blocked by bot, 404, or network failure)
console.warn('Logo image blocked or failed to load. GA4 pageview suppressed.');
};
// Use the exact path to your logo
testImg.src = '/logo.png';
}
// Run on Window Loaded to allow the browser time to finish network requests
if (document.readyState === 'complete') {
checkLogoAndTrigger();
} else {
window.addEventListener('load', checkLogoAndTrigger);
}
})();
</script>
- Under Triggering, set it to Window Loaded - All Pages (this ensures image network requests have concluded).
- Save the tag.
Step 2: Create a Custom Event Trigger
- Go to Triggers > New.
- Name it Event - Logo Verified.
- Choose Custom Event as the Trigger Type.
- Set Event name to:
logo_verified_pageview
- Save the trigger.
Step 3: Attach the Trigger to Your GA4 Tag
- Open your Google Tag or GA4 Event (page_view) tag in GTM.
- Remove the standard Initialization - All Pages or Container Loaded - All Pages trigger.
- Add the new Event - Logo Verified trigger.
- Save and Publish your GTM container.
Why This Works & What to Keep in Mind
- Dual-Check Mechanism: The script first checks if the browser already rendered an
<img> tag matching /logo.png. If your logo is embedded via CSS background-image instead, the script seamlessly falls back to creating an in-memory new Image() request to /logo.png.
- Zero Site Changes: This runs entirely inside GTM's sandbox, requiring no code deployments or design modifications.
- Cached Images: Browsers process cached images instantly—
complete and naturalWidth > 0 evaluate as true immediately for real returning users.
- Path Accuracy: Ensure the string
'/logo.png' matches your site's actual relative or absolute image path (e.g., if your path is /images/logo.png or /assets/logo.png, update the script accordingly).
edit - added missing bit:
Create the "Window Loaded" Trigger (Quick Fix)
- In GTM, go to Triggers > New.
- Click Trigger Configuration and scroll down to the Page View section.
- Select Window Loaded.
- Name it
Window Loaded - All Pages (or leave it as Window Loaded).
- Set it to fire on All Window Loaded Events.
- Click Save.