NNicheStackTutorials
← All tutorials
SvelteKit

Monetizing a Low-Traffic SvelteKit Blog (Real Numbers, Real Stack)

Affiliate links, Adsterra fallback, and newsletter CTA — what actually earned money at 800 visits/month.

·13 min read·SvelteKit
Monetizing a Low-Traffic SvelteKit Blog (Real Numbers, Real Stack) cover

Tested on: SvelteKit blog, 800 visits/month, US/EU traffic Revenue month 1: $4.20 total. Month 6: $89. Not life-changing, but covers hosting.

What didn't work

  • Google AdSense (rejected twice at <1k monthly sessions)
  • Generic Amazon affiliate links (0 conversions in 4 months)
  • Paywall / Patreon (0 subscribers)

What worked — stack ranked

  1. Affiliate links in tutorial content (hosting referrals)
  2. Adsterra (after AdSense rejection)
  3. Newsletter sponsor slot (manual, one deal at month 5)

Affiliate link component

src/lib/components/AffiliateLink.svelte:

<script lang="ts">
  let { href, children } = $props();
</script>

<a
  {href}
  target="_blank"
  rel="sponsored noopener noreferrer"
  class="text-blue-600 underline"
>
  {@render children()}
</a>

Use in MDsvelte or posts:

<AffiliateLink href="https://host.com/?ref=myid">
  Try this host
</AffiliateLink>

rel="sponsored" — Google requires it. Don't skip.

Adsterra after AdSense rejection

Applied with 600 monthly visits. Approved in 3 days.

One banner in sidebar (see adsterra-sveltekit-layout-integration article). RPM ~$1.20.

Newsletter CTA — highest ROI per visitor

src/lib/components/NewsletterCTA.svelte:

<form method="POST" action="https://buttondown.email/api/emails/embed-subscribe/yourid">
  <input type="email" name="email" placeholder="you@email.com" required />
  <button type="submit">Subscribe</button>
</form>

Buttondown free tier. No SvelteKit API route needed — form posts externally.

Disclosure page (required)

src/routes/disclosure/+page.svelte — plain HTML listing affiliate relationships.

Link in footer. FTC compliance isn't optional.

Track what earns (privacy-friendly)

<a
  href="https://host.com/?ref=myid"
  onclick={() => {
    if (typeof plausible !== 'undefined') plausible('Affiliate Click', { props: { vendor: 'host' } });
  }}
>

Plausible custom events. Know which posts drive clicks.

Monthly breakdown (month 6)

Hosting affiliate: $62.00 (2 conversions)
Adsterra: $18.40
Newsletter sponsor: $50.00 (one slot)
Total: $130.40
Hosting cost: -$0 (Cloudflare Pages free)
Domain: -$12/year

Honest advice

At <1k visits, optimize for content and email list, not ad density. Three ad slots won't save you. One good affiliate post about a tool you actually use might.

Tags: SvelteKitMonetizationBlogAdsterra