oglasi: nic manj prikazov, vec mest za enote ki nesejo

Po podatkih AdSense (zadnjih 7 dni) prihodek nesejo folx.tv in-article
(98,93 EUR), Folx News In-Article = slot 4154017639 (82,45 EUR) in Multiplex
(63,59 EUR). Prejsnji commit je pri dveh od teh zmanjsal stevilo mest.

- odlozena zahteva (IntersectionObserver) NI vec privzeta: eager=true.
  Odlozeno nalaganje dvigne vidnost, a znizza stevilo prikazov pri enotah
  globlje na strani - in prav te nesejo denar. Pot ostaja v kodi za kasneje,
  ko bomo ucinek lahko izmerili. Popravek 3-sekundnega odstevanja ostane.
- clanek: enota 4154017639 vrnjena na stran, a pod naslovom in tik pred
  besedilom namesto kot pas nad naslovnico - isti prikazi, boljse mesto,
  naslov ne pade pod pregib.
- PageSideAds: oba stolpca spet tu. Sirina se prilagodi zaslonu prek
  --rail-w: 160x600 od 1536 px, 300x600 od 1700 px. Dodan onAdStatus, da
  prazna enota ne pusti luknje.
- naslovnica dobi Multiplex, edina strana ga ni imela.

Skupaj na clanku (telefon): display pred besedilom, in-article za uvodom,
display na sredini (in vec pri dolgih), multiplex, lepljivi pas.
This commit is contained in:
Claude
2026-08-28 09:32:45 +00:00
parent db9eac20e2
commit 5b519019d2
4 changed files with 56 additions and 24 deletions
+36 -23
View File
@@ -23,7 +23,11 @@ export default function AdSense({
style,
layout,
layoutKey,
eager = false,
// Privzeto zahtevamo takoj. Odlozena zahteva dvigne vidnost, a znizza stevilo
// prikazov pri enotah globlje na strani - in prav te (in-article, multiplex)
// nosijo prihodek. Lazy pot ostaja na voljo prek eager={false}, a je nikjer
// ne uporabljamo, dokler ucinka ne moremo izmeriti v AdSense.
eager = true,
onAdStatus,
}: AdSenseProps) {
const adRef = useRef<HTMLModElement>(null);
@@ -230,36 +234,45 @@ export function MultiplexAd() {
);
}
// En sam desni stolpec 300x600 namesto dveh 160x600.
// 160x600 je stara velikost z malo povprasevanja, dve enoti sta si konkurirali,
// prazna pa je brez onAdStatus pustila luknjo. Prikaze se sele, ko je dovolj
// prostora desno od vsebine (min-[1700px]).
export function PageSideAds({ contentHalfWidth = 640 }: { contentHalfWidth?: number }) {
const gap = 24;
const offset = contentHalfWidth + gap;
// Oba stolpca ostaneta (nic se ne odvzame), a se prilagodita sirini zaslona:
// 160x600 od 1536 px, 300x600 od 1700 px naprej, kjer je prostora dovolj.
// Sirino dolocz CSS, AdSense jo prebere ob zahtevi. Dodan onAdStatus, da prazna
// enota ne pusti luknje - prej je ni imela.
function SideRail({ side, offset }: { side: "left" | "right"; offset: number }) {
const [filled, setFilled] = useState<boolean | null>(null);
if (filled === false) return null;
return (
<div className="relative">
<div
className="hidden min-[1700px]:flex fixed top-0 bottom-0 w-[300px] z-10 items-center justify-center pointer-events-none"
style={{ right: `calc(50% - ${offset}px - 300px)` }}
data-testid="ad-right-sidebar"
>
<div className="pointer-events-auto">
<AdSense
slot="2398082838"
format="vertical"
responsive={false}
style={{ display: "block", width: "300px", height: "600px" }}
onAdStatus={setFilled}
/>
</div>
<div
className="hidden 2xl:flex fixed top-0 bottom-0 w-[160px] min-[1700px]:w-[300px] z-10 items-center justify-center pointer-events-none"
style={side === "left"
? { left: `calc(50% - ${offset}px - var(--rail-w))` }
: { right: `calc(50% - ${offset}px - var(--rail-w))` }}
data-testid={`ad-${side}-sidebar`}
>
<div className="pointer-events-auto w-full">
<AdSense
slot="2398082838"
format="vertical"
responsive={false}
style={{ display: "block", width: "100%", height: "600px" }}
onAdStatus={setFilled}
/>
</div>
</div>
);
}
export function PageSideAds({ contentHalfWidth = 640 }: { contentHalfWidth?: number }) {
const gap = 10;
const offset = contentHalfWidth + gap;
return (
<div className="relative page-side-rails">
<SideRail side="left" offset={offset} />
<SideRail side="right" offset={offset} />
</div>
);
}
export function SidebarAd() {
const [visible, setVisible] = useState(false);