1
0
mirror of https://github.com/alexandrev/xslt-lab.git synced 2026-09-18 19:43:16 +00:00

Anuncios: la doble inicialización del slot y un segundo slot de ancho 0 hunden el CTR por debajo del mínimo de EthicalAds #2

Closed
opened 2026-09-18 20:45:12 +00:00 by alexandrev · 1 comment
Owner

Pedido por el usuario el 18-sep-2026 (punto 2 de la revisión de situación).

Qué pasa. Medido con Playwright contra produccion: una sola carga de la home dispara 7 peticiones /api/v1/decision/ (4 de xsltplayground-main + 3 de xsltplayground-params) y manda el mismo proxy/view/<uuid> dos veces, con UUID idéntico. Eso infla el denominador del CTR.

Tres causas.

  1. El script de EthicalAds auto-inicializa todo div con data-ea-publisher salvo que lleve data-ea-manual="true". El nuestro no lo lleva y además App.jsx:2092 llama a window.ethicalads.load(slot) → doble init.
  2. lastAdRefreshRef = useRef(0) (App.jsx:853): al arrancar en 0, la primera transformación (maybeRefreshAd(), App.jsx:1701) dispara un reload() inmediato saltándose el throttle de 60s. reload() recarga todos los placements.
  3. xsltplayground-params está dentro del panel de parámetros colapsado → ancho 0, 0 hijos: pide anuncios que nunca se renderizan. Es una regresión conocida: 610a3f8 (23-abr) ya lo sacó del panel y 77a2d2c (6-may) lo volvió a meter; 5d81b58 (21-abr) ya lo había quitado por la política de 1 anuncio/página.

Por qué importa. CTR de anuncios: jun 0,186% → jul 0,093% → ago 0,062% → sep 1-17 0,094%. El mínimo de EthicalAds es 0,1%: tres meses seguidos por debajo, sobre el único canal de ingresos.

Pedido por el usuario el 18-sep-2026 (punto 2 de la revisión de situación). **Qué pasa.** Medido con Playwright contra produccion: **una sola carga de la home dispara 7 peticiones `/api/v1/decision/`** (4 de `xsltplayground-main` + 3 de `xsltplayground-params`) y **manda el mismo `proxy/view/<uuid>` dos veces**, con UUID idéntico. Eso infla el denominador del CTR. **Tres causas.** 1. El script de EthicalAds auto-inicializa todo div con `data-ea-publisher` salvo que lleve `data-ea-manual="true"`. El nuestro no lo lleva **y además** `App.jsx:2092` llama a `window.ethicalads.load(slot)` → doble init. 2. `lastAdRefreshRef = useRef(0)` (`App.jsx:853`): al arrancar en 0, la primera transformación (`maybeRefreshAd()`, `App.jsx:1701`) dispara un `reload()` inmediato saltándose el throttle de 60s. `reload()` recarga todos los placements. 3. `xsltplayground-params` está dentro del panel de parámetros colapsado → **ancho 0, 0 hijos**: pide anuncios que nunca se renderizan. Es una regresión conocida: `610a3f8` (23-abr) ya lo sacó del panel y `77a2d2c` (6-may) lo volvió a meter; `5d81b58` (21-abr) ya lo había quitado por la política de 1 anuncio/página. **Por qué importa.** CTR de anuncios: jun 0,186% → jul 0,093% → ago 0,062% → sep 1-17 0,094%. El mínimo de EthicalAds es 0,1%: **tres meses seguidos por debajo**, sobre el único canal de ingresos.
Author
Owner

Implementado en 086d984 y desplegado.

Tres cambios: data-ea-manual="true" en #xsltplayground-main para que el cliente no auto-inicialice un slot que la app ya carga explícitamente; lastAdRefreshRef sembrado con Date.now() en vez de 0, para que la primera transformación no dispare un reload() saltándose el throttle; y eliminado el slot xsltplayground-params en lugar de volver a moverlo — daba 0 ingresos y cargaba todo el riesgo de la política de un anuncio por página.

Medido en producción antes y después, con el mismo script de Playwright:

antes después
peticiones de decisión por carga 7 1
beacons de view enviados 2 (UUID idéntico) 1
slots en el DOM 2 (uno de ancho 0) 1

El CTR es clics/views, así que dejar de duplicar el view debería devolverlo por encima del mínimo de 0,1% de EthicalAds. Comprobar en la API de EthicalAds hacia el 10-oct, con dos o tres semanas de datos limpios.

Implementado en `086d984` y desplegado. Tres cambios: `data-ea-manual="true"` en `#xsltplayground-main` para que el cliente no auto-inicialice un slot que la app ya carga explícitamente; `lastAdRefreshRef` sembrado con `Date.now()` en vez de `0`, para que la primera transformación no dispare un `reload()` saltándose el throttle; y **eliminado** el slot `xsltplayground-params` en lugar de volver a moverlo — daba 0 ingresos y cargaba todo el riesgo de la política de un anuncio por página. **Medido en producción antes y después**, con el mismo script de Playwright: | | antes | después | |---|---|---| | peticiones de decisión por carga | **7** | **1** | | beacons de `view` enviados | **2** (UUID idéntico) | **1** | | slots en el DOM | 2 (uno de ancho 0) | 1 | El CTR es clics/views, así que dejar de duplicar el view debería devolverlo por encima del mínimo de 0,1% de EthicalAds. **Comprobar en la API de EthicalAds hacia el 10-oct**, con dos o tres semanas de datos limpios.
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: alexandrev/xslt-lab#2