Cookies

YouTube sem cookie: adiar o embed do vídeo e do Maps até o aceite

O banner de consentimento está bloqueando tag de anúncio direitinho, e mesmo assim o DevTools mostra cookie de youtube.com gravado antes de qualquer clique. A culpa é do embed: quando o navegador monta o quadro do vídeo ou do mapa, quem faz a requisição é o Google, e o seu script de consentimento não tem como impedir. A saída é não montar o quadro até a pessoa pedir.

Guarde a URL num data-src

No lugar do embed, uma caixa com botão e a URL parada num atributo. Repare no domínio youtube-nocookie.com, que o próprio YouTube oferece pro modo privado:

<div class="video-lazy" data-src="https://www.youtube-nocookie.com/embed/dQw4w9WgXcQ">
  <button type="button">Carregar o vídeo (YouTube)</button>
</div>
document.querySelectorAll('.video-lazy').forEach(function (caixa) {
  caixa.addEventListener('click', function () {
    var q = document.createElement('iframe');
    q.src = caixa.dataset.src + '?autoplay=1';
    q.width = 560;
    q.height = 315;
    q.setAttribute('title', 'Vídeo incorporado');
    q.setAttribute('allowfullscreen', '');
    q.setAttribute('allow', 'autoplay; encrypted-media; picture-in-picture');
    caixa.replaceChildren(q);
  }, { once: true });
});

O { once: true } importa: sem ele um segundo clique recria o quadro e o vídeo volta pro começo.

O embed que o WordPress monta sozinho

O tropeço comum é esquecer que quase todo vídeo entra pelo editor, colado como URL solta num parágrafo: o WP_Embed se registra em the_content na prioridade 8 e converte aquilo em oEmbed ao renderizar. Seu HTML com data-src nem chega a existir nesses posts. Interceptar na saída resolve os dois casos:

// functions.php do tema filho
add_filter('embed_oembed_html', function ($html, $url) {
    if (!preg_match('#src="([^"]+)"#', $html, $m)) { return $html; }
    $src = str_replace('youtube.com', 'youtube-nocookie.com', $m[1]);
    return '<div class="video-lazy" data-src="' . esc_url($src) . '">'
         . '<button type="button">Carregar o vídeo</button></div>';
}, 10, 2);

Trocar só o domínio pro nocookie não basta: ele evita o cookie de publicidade, mas continua batendo em servidor do Google e escreve em armazenamento local depois do play. A garantia é o quadro só existir depois do clique. Mesmo raciocínio pro Maps, com imagem estática por baixo. Depois de subir, abra a aba Application em janela anônima e olhe os cookies antes de clicar em nada: nome de terceiro ali é embed escapando em outro template.

Post Recentes

Custom post type dando 404: flush_rewrite_rules na ativação do plugin

A listagem do custom post type abre e o single dá 404 no WordPress 6.9. Entenda o cache das rewrite…

2 dias atrás

systemd timer no lugar do cron: agendar script com log e sem execução dupla

Um par .service e .timer substitui a linha do crontab com log no journal, execução perdida recuperada no boot e…

2 dias atrás

Descrição em massa no WooCommerce: wp eval-file lendo a lista de SKUs

400 produtos importados do fornecedor com a aba Descrição vazia. Um wp eval-file percorre os SKUs sem texto, grava pelo…

2 dias atrás

Frete grátis no WooCommerce: esconder as outras opções de entrega

Some com PAC e SEDEX da lista quando o frete grátis está disponível, usando woocommerce_package_rates, e limpe o cache de…

3 dias atrás

Erro HTTP no WordPress ao enviar imagem para a biblioteca de mídia

A barra de upload chega no fim e o WordPress devolve só "Erro HTTP". Separe as três causas: Imagick barrado…

3 dias atrás

style amp-custom acima de 75KB: como cortar o CSS inline do AMP

The author stylesheet specified in tag 'style amp-custom' is too long? Meça o bloco com curl e tire da fila…

4 dias atrás