Debate en tu sitio

Pega el código en la página y el bloque de debate aparecerá donde esté su contenedor. Todo lo demás vive dentro de nuestro marco: tu marcado, tus estilos y tus scripts no cambian.

Pruébalo en tu página

Escribe la dirección de una página y recibes el código, y ves el bloque aquí mismo. La vista previa usa el mismo fragmento que copias: un contenedor y un script.

Código listo

<div data-vpvd-thread data-url="https://example.org/article" data-lang="es" data-theme="auto">
  <a href="https://vpvd.io/embed/es?url=https%3A%2F%2Fexample.org%2Farticle&amp;theme=auto" target="_blank" rel="noopener">Abrir el debate en vpvd</a>
</div>
<script src="https://vpvd.io/embed.js" async referrerpolicy="no-referrer"></script>

Lo que verán tus lectores

El sitio está cerrado antes del lanzamiento: el hilo se puede leer de forma anónima, pero el inicio de sesión aún no funciona — quien lea tu página verá un botón que por ahora no lleva a ningún lado. El inicio de sesión se abre el día del lanzamiento.

Dónde pegarlo

El código es el mismo en todas partes; solo cambia el sitio donde se coloca.

  • Sitios estáticos y plantillas propias Donde debe aparecer la conversación: en la plantilla del artículo o de la entrada.
  • WordPress Un bloque de código propio en el editor de la entrada, o un widget de código en la barra lateral. Algunos editores se comen la etiqueta del script al guardar: abre la página publicada y comprueba que el bloque sigue ahí.
  • Tilda El bloque que inserta tu propio código (Otros → código): pega el fragmento entero, con la etiqueta del script.
  • Next.js, Nuxt, React El script se carga una vez en la plantilla del sitio y el componente coloca el contenedor y retira el bloque al desmontarse; si no, al cambiar de ruta queda el marco anterior dentro.
<div data-vpvd-thread data-url="https://example.org/article" data-lang="es" data-theme="auto">
  <a href="https://vpvd.io/embed/es?url=https%3A%2F%2Fexample.org%2Farticle&amp;theme=auto" target="_blank" rel="noopener">Abrir el debate en vpvd</a>
</div>
<script src="https://vpvd.io/embed.js" async referrerpolicy="no-referrer"></script>

Next.js, Nuxt, React

// components/VpvdThread.tsx — one page's discussion. Load the script once in the layout:
// <Script src="https://vpvd.io/embed.js" strategy="afterInteractive" />
'use client';
import { useEffect, useRef } from 'react';

export default function VpvdThread() {
	const box = useRef<HTMLDivElement>(null);
	useEffect(() => {
		const el = box.current;
		const vpvd = (window as any).vpvd;
		if (el && vpvd) vpvd.mount(el);
		return () => { if (el && vpvd) vpvd.destroy(el); };
	}, []);
	return (
		<div ref={box} data-vpvd-thread data-url="https://example.org/article" data-lang="es" data-theme="auto">
			<a href="https://vpvd.io/embed/es?url=https%3A%2F%2Fexample.org%2Farticle&amp;theme=auto" target="_blank" rel="noopener">Abrir el debate en vpvd</a>
		</div>
	);
}

Páginas que cambian sin recargarse

React, Vue, Svelte, Nuxt: La etiqueta del script vive en tu marcado y no sobrevive a un cambio de página: el contenedor se queda vacío donde estaba el bloque. Carga el script una vez en la plantilla del sitio y llama a la actualización de abajo tras cada transición: recorre todos los contenedores de la página con el mismo código que se ejecuta en la primera carga.

// after every client-side transition:
window.vpvd.refresh();

Tema y tipografía

El tema se fija de forma explícita —claro, oscuro o automático— y el bloque se ajusta a tu sitio con variables en el contenedor: tipografía, tamaño, interlineado, color de acento y radio de las esquinas.

data-theme, --vpvd-font, --vpvd-font-size, --vpvd-line-height, --vpvd-accent, --vpvd-radius

Con automático el bloque toma el tema de tu página —el que activas en tu sitio o la preferencia del sistema del lector— y la tipografía, el tamaño y el radio del propio contenedor. Si no encuentra nada, se queda con nuestro aspecto.

Atributos

data-url
la dirección de la página que se debate. El debate está atado a ella, así que debe ser la misma para todos los lectores.
data-lang
el idioma del bloque: uno de los de la lista de abajo. Cualquier otro valor da un 404, porque el marco no existe en otros idiomas.
  • en — English
  • zh-Hans — 简体中文
  • es — Español
  • ar — العربية
  • ru — Русский
  • vi — Tiếng Việt
  • tr — Türkçe
  • fa — فارسی
data-theme
tema del bloque: auto (como en tu página), claro u oscuro.
data-height
la altura que reservamos para el bloque hasta que el marco informe de la suya, en píxeles, por ejemplo 200. Después el bloque se ajusta a la altura real; el valor se mantiene entre 120 y 2000. Ponlo si el salto se nota en tu página: por defecto reservamos 160 píxeles.

Cuando aparece un comentario

Añade este atributo y el bloque avisará a tu página de que apareció un comentario. El evento lleva una palabra y nada sobre el lector:

data-events="on" → vpvd:commented

Cuántos comentarios, para una lista

Una lista de artículos necesita un número, no un widget: esta petición devuelve cuántas respuestas tiene una página (cero si nadie la ha discutido). Está abierta a tu página, no necesita cookies y no sabe nada del lector:

GET /api/nodes/count?url=…

Lo que el código no hace

No lee el contenido de tu página y no deja nuestras cookies en ella. A nuestro servidor solo llega la dirección del atributo: ni texto de la página, ni nombres, ni contadores. Desactivamos el referer tanto en el script como en el marco.

Comprobar que se ha integrado

Abre la página en el navegador y ejecuta estas líneas en la consola: una línea, una respuesta:

  1. el marco está en su sitio: el cargador ha sustituido con él el enlace de reserva del contenedor
  2. el cargador se ha ejecutado: el valor de abajo está definido y su versión es 1 window.vpvd
  3. el marco ha informado de su altura: el número ya no es el reservado, 160, y el bloque se alinea con el hilo
// 1
document.querySelector('iframe[data-vpvd-frame]')
// 2
window.vpvd.version
// 3
document.querySelector('iframe[data-vpvd-frame]').style.height

¿Lo compruebas automáticamente, desde un navegador sin ventana (Firefox)? Tu script no ve los valores de la página: vive en un mundo aparte y comparte con ella el marcado, no esos valores. Lee las señales desde el mundo principal: inserta tu propio script en el documento y toma la respuesta de un atributo.

Política estricta en tu sitio

Permite nuestra dirección (https://vpvd.io) en las directivas que traen el bloque:

  • script-src — de ahí viene el script del bloque
  • frame-src — en el marco se muestra el propio hilo
  • child-src → frame-src — si tu política la fija, los marcos la obedecen a ella y no a la directiva general: un valor de otro origen bloquea en silencio todos los marcos de la página, incluido el nuestro. Nombra aquí también nuestra dirección, o quita la directiva.

Si el script no llega a ejecutarse, el lector igual verá un enlace normal al debate: nuestro contenedor lo lleva desde el principio.

Preguntas

¿Qué ve un lector?

El hilo de esta página y una forma de entrar. Leer no necesita cuenta; escribir se puede como invitado (la respuesta vive media hora) o tras entrar dentro del bloque. Entrar es decisión del lector: la sesión de tu sitio no llega hasta nosotros.

¿Qué sabéis de mis lectores?

La dirección de la página que pusiste en el código, y nada más. No vemos el historial de navegación, ni el texto de tu página, ni quién la visita: la extensión comprueba en local si hay conversación, sin preguntar a ningún servidor. Las cookies son solo del marco.

¿Los comentarios salen en las búsquedas?

No: los buscadores no indexan lo que hay dentro de un marco. El hilo sí se indexa en vpvd, y el enlace está dentro del contenedor.

¿Qué puedo hacer como dueño del sitio?

Quitar el bloque es quitar el código. Confirma que el dominio es tuyo y aparecerá una marca junto a tus respuestas; pero no te deja ocultar las de los demás: las reglas de moderación son las mismas para todos. Tus propias reglas y bloqueos en tu dominio llegarán con el panel del dueño.

¿Cómo retiro el acceso?

No tenemos acceso a tu sitio: el script solo coloca un marco. Borra el código y el bloque desaparece. La sesión dentro del marco vive en nuestra cookie y se va con ella.

Código para tu página

El generador arma el código con el idioma y el tema que elijas.

Abrir el generador