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:
@@ -23,7 +23,11 @@ export default function AdSense({
|
|||||||
style,
|
style,
|
||||||
layout,
|
layout,
|
||||||
layoutKey,
|
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,
|
onAdStatus,
|
||||||
}: AdSenseProps) {
|
}: AdSenseProps) {
|
||||||
const adRef = useRef<HTMLModElement>(null);
|
const adRef = useRef<HTMLModElement>(null);
|
||||||
@@ -230,32 +234,41 @@ export function MultiplexAd() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// En sam desni stolpec 300x600 namesto dveh 160x600.
|
// Oba stolpca ostaneta (nic se ne odvzame), a se prilagodita sirini zaslona:
|
||||||
// 160x600 je stara velikost z malo povprasevanja, dve enoti sta si konkurirali,
|
// 160x600 od 1536 px, 300x600 od 1700 px naprej, kjer je prostora dovolj.
|
||||||
// prazna pa je brez onAdStatus pustila luknjo. Prikaze se sele, ko je dovolj
|
// Sirino dolocz CSS, AdSense jo prebere ob zahtevi. Dodan onAdStatus, da prazna
|
||||||
// prostora desno od vsebine (min-[1700px]).
|
// enota ne pusti luknje - prej je ni imela.
|
||||||
export function PageSideAds({ contentHalfWidth = 640 }: { contentHalfWidth?: number }) {
|
function SideRail({ side, offset }: { side: "left" | "right"; offset: number }) {
|
||||||
const gap = 24;
|
|
||||||
const offset = contentHalfWidth + gap;
|
|
||||||
const [filled, setFilled] = useState<boolean | null>(null);
|
const [filled, setFilled] = useState<boolean | null>(null);
|
||||||
if (filled === false) return null;
|
if (filled === false) return null;
|
||||||
return (
|
return (
|
||||||
<div className="relative">
|
|
||||||
<div
|
<div
|
||||||
className="hidden min-[1700px]:flex fixed top-0 bottom-0 w-[300px] z-10 items-center justify-center pointer-events-none"
|
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={{ right: `calc(50% - ${offset}px - 300px)` }}
|
style={side === "left"
|
||||||
data-testid="ad-right-sidebar"
|
? { 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">
|
<div className="pointer-events-auto w-full">
|
||||||
<AdSense
|
<AdSense
|
||||||
slot="2398082838"
|
slot="2398082838"
|
||||||
format="vertical"
|
format="vertical"
|
||||||
responsive={false}
|
responsive={false}
|
||||||
style={{ display: "block", width: "300px", height: "600px" }}
|
style={{ display: "block", width: "100%", height: "600px" }}
|
||||||
onAdStatus={setFilled}
|
onAdStatus={setFilled}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -312,3 +312,10 @@ div[class^="fc-"] {
|
|||||||
.adsbygoogle {
|
.adsbygoogle {
|
||||||
contain: layout style;
|
contain: layout style;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Sirina stranskih stolpcev: 160x600 od 1536 px, 300x600 od 1700 px naprej.
|
||||||
|
Vrednost bere PageSideAds za izracun odmika od sredine. */
|
||||||
|
.page-side-rails { --rail-w: 160px; }
|
||||||
|
@media (min-width: 1700px) {
|
||||||
|
.page-side-rails { --rail-w: 300px; }
|
||||||
|
}
|
||||||
|
|||||||
@@ -358,6 +358,11 @@ export default function ArticlePage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{/* Enota "Folx News - In-Article" (4154017639) je bila prej vrhnji pas nad
|
||||||
|
naslovnico. Ostane na clanku, a pod naslovom in tik pred besedilom:
|
||||||
|
isti prikazi, boljse mesto, naslov ne pade pod pregib. */}
|
||||||
|
<InContentDisplayAd />
|
||||||
|
|
||||||
{(() => {
|
{(() => {
|
||||||
const sanitized = sanitizeContent(article.content);
|
const sanitized = sanitizeContent(article.content);
|
||||||
const blocks = sanitized.split(/(?=<(?:p|h[2-4]|div)[\s>])/i).filter(Boolean);
|
const blocks = sanitized.split(/(?=<(?:p|h[2-4]|div)[\s>])/i).filter(Boolean);
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { Eye, Play, Images } from "lucide-react";
|
|||||||
import { Skeleton } from "@/components/ui/skeleton";
|
import { Skeleton } from "@/components/ui/skeleton";
|
||||||
import Header from "@/components/header";
|
import Header from "@/components/header";
|
||||||
import Footer from "@/components/footer";
|
import Footer from "@/components/footer";
|
||||||
import AdSense, { ArticleCardAd, SidebarAd, PageSideAds } from "@/components/adsense";
|
import AdSense, { ArticleCardAd, SidebarAd, PageSideAds, MultiplexAd } from "@/components/adsense";
|
||||||
import { PhotoGalleryWidget } from "@/components/photo-gallery";
|
import { PhotoGalleryWidget } from "@/components/photo-gallery";
|
||||||
import { HoroscopeWidget } from "@/components/horoscope-widget";
|
import { HoroscopeWidget } from "@/components/horoscope-widget";
|
||||||
import { RecipeWidget } from "@/components/recipe-widget";
|
import { RecipeWidget } from "@/components/recipe-widget";
|
||||||
@@ -970,6 +970,13 @@ export default function Home() {
|
|||||||
</div>
|
</div>
|
||||||
</LazySection>
|
</LazySection>
|
||||||
|
|
||||||
|
{/* Multiplex je zadnjih sedem dni najhitreje rastoca enota (+500 %),
|
||||||
|
naslovnica ga edina ni imela. */}
|
||||||
|
<div className="mt-6" data-testid="ad-multiplex-home">
|
||||||
|
<div className="text-[9px] text-muted-foreground/40 text-center pb-1 uppercase tracking-widest">Anzeige</div>
|
||||||
|
<MultiplexAd />
|
||||||
|
</div>
|
||||||
|
|
||||||
</main>
|
</main>
|
||||||
<Footer />
|
<Footer />
|
||||||
<PushPromptBanner />
|
<PushPromptBanner />
|
||||||
|
|||||||
Reference in New Issue
Block a user