DEV Community

LeoJulieta
LeoJulieta

Posted on

Evita que tus chats de Discord aparezcan en Google

Alertas de Xataka y Hipertextual: cómo evitar que los mensajes de Discord aparezcan en Google

Introducción

Los últimos artículos de Xataka y Hipertextual han puesto en alerta a miles de usuarios de Discord: los chats públicos pueden estar siendo indexados por Google y aparecer en los resultados de búsqueda. Desde que se publicaron esas notas, las búsquedas de “Discord mensajes indexados” han subido un 320 % y los administradores de servidores están pidiendo soluciones inmediatas.

En este artículo encontrarás, paso a paso y con ejemplos concretos, cómo funciona la indexación, qué ajustes de privacidad debes aplicar en tus servidores y canales, y qué técnicas (robots.txt, meta tags, cabeceras HTTP) puedes usar para bloquearla. Incluimos scripts en Python y Bash para auditar URLs, usar Google Search Console y un checklist de buenas prácticas. Al final, compararemos Discord con otras plataformas de mensajería (Telegram, Slack y Mattermost) y responderemos a las preguntas más frecuentes.


1. ¿Por qué es urgente actuar ahora?

Motivo Qué implica para tu comunidad
Información sensible expuesta Contraseñas temporales, enlaces a documentos internos o conversaciones privadas pueden aparecer en la primera página de Google, poniendo en riesgo a empresas y usuarios.
Cumplimiento legal GDPR y la LOPD exigen que los datos personales no se publiquen sin consentimiento explícito. La indexación automática puede considerarse una vulneración.
Daño reputacional Un canal de soporte técnico que muestra errores de configuración o discusiones conflictivas puede perjudicar la imagen de la marca.
Trabajo remoto en auge Cada vez más equipos usan Discord como herramienta colaborativa; la línea entre “público” y “privado” se difumina y el control se vuelve crítico.

2. ¿Cómo ocurre la indexación?

2.1. URLs públicas de Discord

Cuando un servidor está configurado como público, Discord genera URLs estáticas para cada canal, mensaje y archivo adjunto, por ejemplo:

https://discord.com/channels/123456789012345678/987654321098765432
Enter fullscreen mode Exit fullscreen mode

Si el canal permite el acceso sin autenticación (o mediante un token de invitación que Google pueda seguir), Googlebot lo trata como cualquier otra página web y la indexa.

2.2. Señales que activan el rastreo

Señal Ejemplo concreto Resultado en Google
Enlaces externos Un usuario comparte la URL del canal en Reddit o Twitter Google sigue el enlace y descubre la página.
Sitemaps generados por bots Algunos bots de Discord crean sitemaps XML automáticamente Google los procesa como fuentes de URLs.
Falta de X‑Robots‑Tag La respuesta HTTP no contiene noindex, nofollow Google indexa la página sin restricciones.

3. Configuración de privacidad en Discord

  1. Convertir el servidor a “Privado”
    • En Ajustes del servidor → Privacidad desactiva Permitir que cualquiera se una con un enlace.
  2. Restringir la visibilidad de canales
    • En cada canal, abre Permisos y elimina el permiso Ver canal para el rol @everyone.
  3. Desactivar los enlaces de invitación permanentes
    • En Ajustes → Invites, elimina los enlaces con expiración “Nunca”.

Tip rápido: Usa el comando de Discord !lockdown (si tienes un bot de moderación) para revocar todos los permisos de @everyone en segundos.


4. Bloquear la indexación desde el lado del servidor

Discord no permite editar directamente los encabezados HTTP, pero puedes usar un proxy inverso (por ejemplo, Cloudflare Workers o Nginx) para añadir las cabeceras necesarias.

4.1. Con Nginx

location ~ ^/channels/ {
    add_header X-Robots-Tag "noindex, nofollow, nosnippet" always;
    add_header Cache-Control "private, max-age=0" always;
}
Enter fullscreen mode Exit fullscreen mode

4.2. Con Cloudflare Workers (JavaScript)

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)
  if (url.pathname.startsWith('/channels/')) {
    const resp = await fetch(request)
    const newHeaders = new Headers(resp.headers)
    newHeaders.set('X-Robots-Tag', 'noindex, nofollow')
    return new Response(resp.body, {status: resp.status, headers: newHeaders})
  }
  return fetch(request)
}
Enter fullscreen mode Exit fullscreen mode

4.3. Robots.txt (solo para dominios propios)

Si usas un dominio propio con Discord Widget (widget.discord.com), añade un robots.txt en la raíz:

User-agent: *
Disallow: /channels/
Enter fullscreen mode Exit fullscreen mode

5. Auditar la exposición de tus canales

5.1. Script en Bash (requiere curl y jq)

#!/usr/bin/env bash
CHANNELS=("123456789012345678/987654321098765432" "123456789012345678/111111111111111111")
for c in "${CHANNELS[@]}"; do
  URL="https://discord.com/channels/$c"
  CODE=$(curl -s -o /dev/null -w "%{http_code}" "$URL")
  echo "[$CODE] $URL"
done
Enter fullscreen mode Exit fullscreen mode

5.2. Script en Python (usando requests)

import requests

channels = [
    "123456789012345678/987654321098765432",
    "123456789012345678/111111111111111111"
]

for ch in channels:
    url = f"https://discord.com/channels/{ch}"
    r = requests.get(url, allow_redirects=False)
    print(f"{r.status_code} {url}")
Enter fullscreen mode Exit fullscreen mode

Ejecuta cualquiera de los dos scripts y verifica que todas las URLs devuelvan 403 Forbidden o 401 Unauthorized; cualquier 200 OK indica que el contenido sigue siendo accesible y, por tanto, susceptible de indexarse.


6. Usar Google Search Console para eliminar contenido

  1. Accede a tu cuenta de Google Search Console.
  2. En el menú izquierdo, selecciona Remociones → Nueva solicitud.
  3. Introduce la URL completa del canal que deseas eliminar y elige Eliminar temporalmente.
  4. Repite el proceso para cada URL expuesta.

Importante: La eliminación temporal dura 90 días. Mientras tanto, asegúrate de que los encabezados X‑Robots‑Tag estén configurados como se muestra en la sección 4.


7. Checklist rápido de buenas prácticas

✅ Acción
1 Cambiar el servidor a Privado y revocar el rol @everyone en todos los canales.
2 Desactivar o eliminar enlaces de invitación permanentes.
3 Implementar un proxy (Nginx o Cloudflare Workers) que añada X-Robots-Tag: noindex, nofollow.
4 Auditar periódicamente las URLs con los scripts de Bash o Python.
5 Registrar el dominio (si usas widget) en Google Search Console y crear una regla de remoción para URLs ya indexadas.
6 Revisar los permisos de bots y evitar que generen sitemaps automáticos.
7 Documentar la política de privacidad y compartirla con los miembros del servidor.

8. Comparativa rápida: Discord vs. otras plataformas

Plataforma ¿Indexa contenido público? Herramientas de control nativas
Discord Sí, si el canal es público y la URL es accesible. No hay control de cabeceras; se depende de proxies o cambios de permisos.
Telegram No indexa chats privados; los canales públicos pueden aparecer en búsquedas internas, no en Google. Opciones de Privacidad y Enlace de invitación muy granulares.
Slack Los espacios de trabajo privados nunca se indexan; los canales públicos pueden aparecer en buscadores internos. Configuración de Discovery y App Directory permite bloquear rastreadores externos.
Mattermost Similar a Slack; la indexación depende de la configuración del servidor web (Nginx/Apache). Control total de cabeceras HTTP y robots.txt.

En conclusión, Discord es la única de estas plataformas que permite URLs estáticas accesibles sin autenticación, lo que la hace más vulnerable a la indexación accidental.


9. Preguntas frecuentes

¿Puedo evitar que Google indexe todos los canales de mi servidor?

Sí. Cambia el servidor a *


Herramienta mencionada: Heroku

Top comments (0)