Adsterra Popunder on Hugo & VitePress Without Killing UX (Safe Setup)
Add Adsterra popunder to static Hugo/VitePress sites with frequency caps, mobile exclusion, and SSR-safe placement. +$1.40 RPM data.
Context: AdSense RPM $4.20 on US traffic. Added Adsterra popunder as supplement — not replacement. Risk: Aggressive popunders destroy return visitors and get you flagged in Chrome Safe Browsing if misconfigured.
TL;DR
- Cap at 1 popunder per 24h; exclude mobile and first pageview.
- Place script at end of body, never in head.
- VitePress: inject in onMounted, not during SSR.
Safe configuration checklist
□ Frequency cap: 1 per 24h per user (cookie/localStorage)
□ Exclude mobile (or separate lower cap)
□ No popunder on first pageview (delay 2nd page or 30s)
□ No popunder on checkout/contact pages
□ Disable companion banner injection
□ HTTPS only
Script placement
End of <body>, never in <head>:
<!-- layouts/partials/adsterra.html -->
<script is:inline>
(function() {
if (localStorage.getItem('pop_shown')) return;
if (window.matchMedia('(max-width: 768px)').matches) return;
// Adsterra tag here — async
localStorage.setItem('pop_shown', Date.now());
})();
</script>
Hugo: {{ partial "adsterra.html" . }} before </body>.
VitePress: .vitepress/theme/Layout.vue — inject in onMounted, not SSR.
VitePress SSR trap
Ad scripts referencing window during SSR crash build:
<script setup>
import { onMounted } from 'vue';
onMounted(() => { /* load ad script */ });
</script>
Never import ad SDK at top level in theme components.
Revenue vs retention
Popunder RPM add-on: +$1.40
Return visitor rate: 22% → 18% (-4pp)
Pages/session: 2.1 → 1.9
Net revenue: still positive (+12% total)
Tracked with Plausible — return visitors dropped but new session revenue compensated.
Combine with AdSense policy
Google doesn't forbid other ad networks on same page. Don't:
- Place AdSense and popunder trigger on same click target
- Use misleading "close" buttons
Ad blocker interaction
40% of dev audience blocks Adsterra. Accept it — don't anti-adblock gate tutorial content.
Monitoring
Weekly check:
- Chrome Safe Browsing status
- GSC Core Web Vitals (popunder shouldn't affect if no banner inject)
- Adsterra dashboard invalid traffic %
Invalid traffic > 5% → tighten frequency cap.
Removal criteria
I would remove popunder if:
- Return visitors < 12%
- Safe Browsing warning
- Organic traffic drops > 15% month-over-month
So far none triggered. Popunder is a scalpel, not a business model.
FAQ
Is Adsterra popunder safe for static blogs?
Yes with frequency caps, mobile exclusion, and delayed trigger. Aggressive config hurts UX and can trigger Safe Browsing flags.
How do I prevent popunder on every pageview?
Use localStorage or cookie to track last shown time. Skip first visit and cap to once per 24 hours.
Does popunder hurt Core Web Vitals?
Not if loaded after first paint at end of body with async script. Avoid synchronous injection in head.