Pular para o conteúdo

Monetization

Monetization

Current state (2026-11-06): AdSense is paused site-wide at the edge. The Worker strips the account loader (adsbygoogle.js?client=…) and the pagead2 preconnect/dns-prefetch hints from every HTML response on the way out (stripAdLoader in site/worker_html.mjs, wired in serveHtml in site/worker.js). No ads serve anywhere, including /chat/.

Why ads were paused

  • Run-rate collapsed with the Oct 30 algorithmic demotion (#198): weekly AdSense earnings fell from $31.89 to $8.32 (~$1.20/day) and ad impressions per 1k pageviews sit at ~9% of the 2,650 baseline (bot-inflated pageviews). The pre-collapse ceiling was ~$133/month — ads were never the business, and right now they pay nothing.
  • Quality risk during the re-evaluation window: the ad stack was a suspected drag (#203 ad-above-the-fold, #204 manual units, #200 overlay stack). Serving a content-first, zero-CLS page to Google’s re-evaluation is worth more than $1.20/day.
  • Invalid-traffic exposure: with pageviews bot-inflated and fill rates near zero, continuing to serve ads risked an IVT flag for no revenue.

What the pause does and does not touch

ThingState while paused
AdSense accountOpen, untouched. No serving happens because the loader never reaches the browser.
ads.txtStill deployed (account stays verified for a trivial resume).
Local build / templatesUnchanged — the loader is still baked into layout.html / chat_layout.html.
Ad-bearing gates (audit-metadata, build-freshness, predeploy)Keep passing: they read the local build, which still carries the loader. Their meaning while paused is “the loader is present in source”.
ad-loader.jsStill served but inert (its ins.adsbygoogle targets never exist without the account loader).
GA4ad_viewable / ad_click events stop firing (no targets).

Resuming ads

Revert stripAdLoader from serveHtml (keep or drop the export) and redeploy the worker (scripts/deploy-site-worker.sh). Ads resume on the next request with zero estate changes. Do this only with a deliberate decision — ideally paired with the #203/#204 layout fixes so the same quality risks do not come back with the ads.

Alternatives, ranked

1. Leilões affiliate (Zuk) — live pilot

Commission split on buyers indicated through the link. Pilot live on /estado/sao-paulo/sao-paulo/ and the /leiloes/ hub; 9,748 of 10,455 city pages carry the leilões section. Blocked on the official Zuk tracking link (the current UTM is a placeholder in site/leiloes/partner.go). Expansion is a one-line cityPartners map entry plus a targeted regenerate-city-pages --manifest run per city batch.

2. Corretores subscriptions (“Agente Destaque”)

The Stripe subscription pipeline already exists (billing-worker, mode = subscription) and the corretores profile pages are live with a featured-flag hook in the schema. Path: pick a price, gate the featured placement on subscription_status = active, recruit from the existing approved brokers in D1. Highest recurring-revenue potential; needs sales motion, not code.

3. Imobiliária lead-gen on city pages

City pages already enumerate agencies per city (Serper/DeepSeek data). Sell placement or contact-lead capture to the agencies themselves. Highest-touch (no self-serve flow exists), but the inventory (10k+ city pages × local agencies) is unique to this estate.

4. Referral precedents (RightRep et al.)

The RightRep banner was retired (stripped at the edge) because it was a fixed overlay with no revenue tied to it. Any future partner banner must be in-content, rel="sponsored", and paid per result — the leilões model, not the banner model.

  • Route through /redirecionamento/ (the shared interstitial with GA4 redirect_click tracking) with rel="sponsored noopener noreferrer" — see site/leiloes/partner.go and site/templates/leiloes_index.html.
  • Never cache empty or failed searches (#225 anti-poisoning rule).
  • Affiliate disclosure: partner blocks are labeled “Parceiro” in the UI; keep that label on every future placement.
  • Decision checkpoint: re-evaluate at the next GSC recovery read (WoW /estado/ impressions) — if recovery lands, the resume-ads decision should be made together with #203/#204, not before.