Nascondi i post sponsorizzati su LinkedIn / Facebook / Twitter / X — CSS + MutationObserver
I feed dei social media sono ~30% di post sponsorizzati mescolati all'organico. I post sponsorizzati sono progettati per non sembrare pubblicità — hash di classi casuali, DOM dinamico. I blocca-pubblicità standard li intercettano per pattern di URL (DoubleClick, Adsense), non per il layout del feed. È lì che JustZix, combinando CSS + JS, brilla.
LinkedIn (linkedin.com)
LinkedIn ha il DOM più offuscato. I nomi di classi come .feed-shared-update-v2--ad sono stabili ma cambiano a ogni restyling. Il text matching è affidabile:
/* Tentativo CSS — ne intercetta alcuni */
[data-ad-banner], .feed-shared-update-v2--promoted,
.feed-shared-actor__sub-description:has-text("Promoted") {
display: none !important;
}
Il CSS :has-text() NON è standard — è una pseudo-classe esclusiva di JustZix. Fallback via MutationObserver JS:
// Regola JS — text-match «Promoted» nelle card del feed
const hideSponsored = () => {
document.querySelectorAll('.feed-shared-update-v2, [data-id*="urn:li:activity"]').forEach(card => {
if (card.dataset.jzChecked) return;
card.dataset.jzChecked = '1';
const text = card.textContent;
if (/^Promoted|Sponsored/m.test(text) ||
/\bPromoted\b/.test(card.querySelector('.feed-shared-actor__sub-description')?.textContent || '')) {
card.style.display = 'none';
JUSTZIX.log(`[LinkedIn] Card sponsorizzata nascosta`);
}
});
};
new MutationObserver(hideSponsored).observe(document.body, {childList: true, subtree: true});
hideSponsored();
Facebook (facebook.com)
FB ha marcatori basati su ARIA — più stabili dei nomi di classi:
/* Post con etichetta «Sponsored» — Facebook usa attributi aria */
div[aria-label="Sponsored"],
div:has(> * > span[aria-label="Sponsored"]),
[data-pagelet*="Sponsored"] {
display: none !important;
}
/* Rail laterale con «Suggested for you» */
[aria-label="Suggested for you"], [aria-label="Reels and short videos"] {
display: none !important;
}
Booster JS — pulisce il feed allo scroll, dato che lo scroll infinito carica nuovi post:
// Regola JS
new MutationObserver(() => {
document.querySelectorAll('div[role="feed"] > div').forEach(post => {
if (post.dataset.jzChecked) return;
post.dataset.jzChecked = '1';
if (post.querySelector('[aria-label="Sponsored"]')) {
post.style.display = 'none';
JUSTZIX.log('[FB] Sponsorizzato nascosto');
}
});
}).observe(document.body, {childList: true, subtree: true});
Twitter / X (twitter.com / x.com)
X ha un'etichetta «Promoted» come icona SVG + testo. Twitter ha anche barre laterali «Suggerimenti» / «Tendenze per te»:
/* Tweet sponsorizzati */
article:has([data-testid="promotedIndicator"]),
article:has(svg[data-testid="ad"]) {
display: none !important;
}
/* Barra laterale Tendenze + Chi seguire */
[aria-label="Timeline: Trending now"],
[data-testid="sidebarColumn"] [data-testid="UserCell"] {
display: none !important;
}
Caso d'uso 1 — TOGGLE3 «Livello di protezione anti-pubblicità»
Severità a 3 stadi per piattaforma:
// Azione TOGGLE3 «🛡️ Protezione»
states[0] = { label: 'Off', value: 'off' } // nessun filtraggio
states[1] = { label: 'Normal', value: 'normal' } // nascondi sponsorizzato
states[2] = { label: 'Strict', value: 'strict' } // nascondi sponsorizzato + suggerito + tendenze
code: |
document.documentElement.dataset.jzProtection = value;
JUSTZIX.log(`Protezione: ${value}`);
La regola CSS usa l'attributo data:
html[data-jz-protection="off"] .jz-hide-sponsored { display: block !important; }
html[data-jz-protection="strict"] [aria-label*="Suggested"] { display: none !important; }
Caso d'uso 2 — l'Output Console conta gli elementi nascosti
// In una regola JS:
let hiddenCount = 0;
window.JZ_HIDDEN_SPONSORED = () => {
JUSTZIX.log(`[${location.hostname}] Numero di sponsorizzati nascosti: ${hiddenCount}`);
};
// Incrementa a ogni .style.display = 'none': hiddenCount++;
// Chiama dalla JS Console: JZ_HIDDEN_SPONSORED()
Trappole
- I selettori cambiano. Le piattaforme social riorganizzano spesso il DOM per rendere più difficile il blocco. Testa le regole ogni mese.
- Il text-matching è fragile per l'i18n. «Promoted» / «Sponsored» / «Sponsorizzato» / «Reklama» — lingue diverse. Aggiungi una disgiunzione regex.
- MutationObserver è costoso sui feed grandi. Throttla l'observer (debounce setTimeout 200 ms) se l'FPS cala.
- :has-text() non è CSS standard. JustZix lo supporta. In CSS nativo usa :has(div:contains(...)) (anch'esso non standard) o un observer JS.
Cosa fare dopo
- Nascondi i banner cookie — pattern gemello
- Personalizza le app di chat IA — pattern CSS + observer JS
- TOGGLE3 — selettore di protezione a 3 stati
Installa JustZix e recupera il 30% del tuo feed per il contenuto organico.
Valuta questo articolo
Nessuna valutazione — sii il primo.