Agregar scripts externos a un sitio web permite incorporar herramientas de analítica, chats, mapas, reproductores, publicidad, botones sociales y otros servicios sin desarrollarlos desde cero. Sin embargo, cada script de terceros puede afectar la seguridad, la privacidad y el rendimiento del sitio.
No alcanza con copiar el código que entrega un proveedor y pegarlo en cualquier parte. Antes de incorporarlo conviene comprobar quién lo suministra, qué datos recopila, cuándo se ejecuta, qué recursos carga y cómo se comporta si el servicio externo deja de responder.
En esta guía veremos cómo agregar scripts y herramientas externas de forma segura, tanto en un sitio HTML como en WordPress, y qué controles aplicar antes y después de publicarlos.
Índice
- Qué es un script externo
- Qué riesgos puede introducir
- Qué revisar antes de instalarlo
- Cómo agregarlo en un sitio HTML
- Cómo agregarlo correctamente en WordPress
- Diferencias entre async y defer
- Cómo utilizar Subresource Integrity
- Cómo limitar scripts con Content Security Policy
- Privacidad, cookies y consentimiento
- Cómo reducir el impacto en el rendimiento
- Scripts externos y Cloudflare
- Cómo comprobar que funciona correctamente
- Problemas frecuentes
- Lista de comprobación
- Preguntas frecuentes
Qué es un script externo
Un script externo es un archivo JavaScript que la página descarga desde una URL, frecuentemente perteneciente a otro proveedor. El código suele incorporarse mediante una etiqueta como esta:
<script src="https://cdn.ejemplo.com/herramienta.js"></script>
Algunos servicios entregan un fragmento más extenso que crea elementos, carga otros archivos o envía información hacia una plataforma externa. Es habitual encontrar este tipo de integraciones en:
- Google Analytics y administradores de etiquetas.
- Chats de atención al cliente.
- Mapas y herramientas de geolocalización.
- Videos y reproductores multimedia.
- Sistemas de publicidad o seguimiento de conversiones.
- Formularios, encuestas y calendarios.
- Fuentes, bibliotecas y componentes visuales.
- Botones de pago o widgets de redes sociales.
El código se ejecuta en el navegador del visitante. Dependiendo de cómo esté desarrollado y de las protecciones del sitio, puede interactuar con la página, leer información disponible en el documento, crear cookies y comunicarse con servidores externos.
Qué riesgos puede introducir un script de terceros
Pérdida de control sobre el código
Cuando el archivo se carga desde el dominio del proveedor, este puede modificarlo sin que cambies el código de tu página. Una actualización defectuosa puede romper funciones del sitio y un proveedor comprometido podría distribuir código malicioso.
Acceso a información de la página
Un script puede acceder a elementos del documento y a datos disponibles para JavaScript. Por eso no conviene exponer contraseñas, tokens privados, datos personales innecesarios ni información sensible dentro del HTML.
Rendimiento más lento
Cada herramienta puede sumar solicitudes, transferencias, ejecución de JavaScript y conexiones hacia otros dominios. Los chats, administradores de etiquetas, anuncios y reproductores suelen cargar recursos adicionales después del archivo inicial.
Dependencia de otro servicio
Si el proveedor responde lentamente o deja de funcionar, la herramienta puede demorarse o fallar. Una integración mal implementada también puede retrasar la visualización de la página completa.
Privacidad y cumplimiento
Algunas integraciones registran direcciones IP, identificadores, páginas visitadas, eventos, ubicación aproximada u otra información. El responsable del sitio debe conocer qué datos se procesan y si corresponde solicitar consentimiento.
Qué revisar antes de instalar un script externo
Antes de copiar el fragmento, respondé estas preguntas:
- ¿El proveedor es conocido y tiene documentación oficial?
- ¿La URL utiliza HTTPS?
- ¿Qué dominios y archivos adicionales carga?
- ¿Qué información recopila y con qué finalidad?
- ¿Crea cookies o almacenamiento local?
- ¿Debe cargarse en todas las páginas o solamente en algunas?
- ¿Es compatible con la política de privacidad del sitio?
- ¿Existe una forma de desactivarlo rápidamente?
- ¿La función justifica el impacto que agrega?
No utilices código recibido por correo o publicado en un foro sin compararlo con la documentación oficial. Tampoco agregues scripts “nulled”, modificados o descargados desde repositorios no autorizados.
Las claves visibles en JavaScript no pueden considerarse secretas. Si una integración necesita una credencial privada, la operación debe realizarse desde el servidor y no directamente desde el navegador.
Cómo agregar un script en un sitio HTML
La ubicación correcta depende de las instrucciones del proveedor. Algunos códigos deben colocarse dentro de <head>; otros funcionan mejor antes de </body>.
Para un archivo independiente que puede esperar hasta que el documento esté interpretado, una implementación habitual es:
<script defer src="https://cdn.ejemplo.com/herramienta.js"></script>
No cambies la ubicación ni agregues atributos si el proveedor indica expresamente otra configuración. Ciertas herramientas utilizan dos fragmentos: uno en el encabezado y otro dentro del cuerpo.
Siempre conservá una copia del archivo antes de editarlo. Después del cambio, comprobá el sitio en una ventana privada y en distintos tamaños de pantalla.
Cómo agregar scripts externos correctamente en WordPress
En WordPress no conviene pegar código directamente en los archivos del tema principal, porque una actualización podría sobrescribirlo. Las opciones más seguras son:
- Utilizar el plugin oficial del proveedor, si es confiable y se mantiene actualizado.
- Usar una función específica del tema hijo.
- Agregar el código mediante un plugin de fragmentos administrado cuidadosamente.
- Utilizar los hooks disponibles en el tema o constructor visual.
- Cargar el archivo mediante
wp_enqueue_script()cuando se trata de un desarrollo propio.
Ejemplo para un desarrollo personalizado en un tema hijo o plugin propio:
function ad_cargar_herramienta_externa() {
wp_enqueue_script(
'herramienta-externa',
'https://cdn.ejemplo.com/herramienta.js',
array(),
'1.0.0',
array(
'strategy' => 'defer',
'in_footer' => true,
)
);
}
add_action( 'wp_enqueue_scripts', 'ad_cargar_herramienta_externa' );
El nombre, la URL, la versión, las dependencias y la estrategia deben adaptarse a la herramienta real. No agregues este ejemplo literalmente sin reemplazar sus valores.
Si el código solamente debe funcionar en una página, aplicá una condición para evitar cargarlo en todo el sitio. Menos JavaScript innecesario significa menos superficie de ataque y mejor rendimiento.
Diferencias entre async y defer
Un script clásico sin atributos puede detener temporalmente el análisis del documento mientras se descarga y ejecuta. Los atributos async y defer ayudan a reducir ese bloqueo, pero no son equivalentes.
Cuándo utilizar defer
defer descarga el archivo en paralelo y espera hasta que el documento haya sido interpretado. Además, los scripts con defer conservan su orden relativo. Suele ser apropiado cuando el código necesita acceder al contenido de la página o depende de otro archivo diferido.
Cuándo utilizar async
async descarga el archivo en paralelo y lo ejecuta cuando está disponible. No garantiza el orden entre varios scripts. Es apropiado para herramientas independientes que no dependen del documento completo ni de otros archivos.
<script async src="https://cdn.ejemplo.com/independiente.js"></script>
<script defer src="https://cdn.ejemplo.com/dependiente.js"></script>
No agregues ambos atributos sin comprender el resultado. Si el proveedor proporciona un fragmento asíncrono específico, respetá su implementación.
Cómo utilizar Subresource Integrity
Subresource Integrity o SRI permite indicar el hash esperado de un archivo externo. El navegador calcula el hash del recurso descargado y solamente lo ejecuta si coincide.
<script
src="https://cdn.ejemplo.com/biblioteca-1.0.0.min.js"
integrity="sha384-HASH_PUBLICADO_POR_EL_PROVEEDOR"
crossorigin="anonymous"
defer>
</script>
SRI resulta útil para archivos estáticos y versionados cuando el proveedor publica un hash válido y configura CORS correctamente. No suele ser apropiado para scripts dinámicos que cambian frecuentemente bajo la misma URL, porque cualquier modificación legítima hará que el navegador los bloquee.
No inventes ni copies un hash correspondiente a otra versión. Utilizá el valor publicado por el proveedor o calculalo sobre el archivo exacto que vas a cargar.
Cómo limitar scripts con Content Security Policy
Content Security Policy o CSP permite definir desde qué orígenes puede ejecutarse JavaScript. Una política bien configurada reduce el impacto de inyecciones de código y evita conexiones no autorizadas.
Una política inicial de prueba podría enviarse como encabezado:
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' https://cdn.ejemplo.com;
El modo Report-Only permite observar incompatibilidades sin bloquear recursos. Después de revisar los informes y agregar únicamente los orígenes necesarios, se puede evaluar una política obligatoria.
No copies una CSP genérica directamente en producción. Los scripts, estilos, fuentes, imágenes, iframes y conexiones utilizados por cada sitio son diferentes. Una directiva incorrecta puede bloquear formularios, estadísticas, pagos o componentes del tema.
Para políticas más estrictas se pueden utilizar nonces o hashes en lugar de permitir dominios completos. La implementación debe planificarse y probarse en todas las funciones críticas.
Privacidad, cookies y consentimiento
Antes de activar una herramienta de analítica, publicidad o seguimiento, revisá su documentación de privacidad. Identificá:
- Qué datos recopila.
- Qué cookies o identificadores crea.
- A qué países o proveedores transfiere información.
- Durante cuánto tiempo conserva los datos.
- Cómo puede el visitante rechazar o revocar el consentimiento.
Cuando corresponda, el script no debería ejecutarse hasta que el visitante otorgue consentimiento. Ocultar solamente el widget no es suficiente si sus archivos ya se descargaron y enviaron información.
Actualizá la política de privacidad y cookies para reflejar las herramientas realmente utilizadas. Si procesás información sensible o no tenés certeza sobre las obligaciones aplicables, consultá a un profesional especializado.
Cómo reducir el impacto en el rendimiento
Antes de instalar la herramienta, medí el sitio. Repetí la prueba después y compará el tiempo de carga, la interacción y las solicitudes generadas.
Buenas prácticas:
- Cargá el script solamente en las páginas donde se necesita.
- Utilizá
deferoasynccuando sean compatibles. - Retrasá herramientas secundarias hasta que exista interacción o consentimiento.
- Limitá la cantidad de etiquetas dentro de administradores como Google Tag Manager.
- Eliminá servicios y fragmentos que ya no se utilicen.
- Evitá cargar dos herramientas que cumplen la misma función.
- Controlá los recursos adicionales incorporados por chats, mapas y reproductores.
- Probá el sitio desde teléfonos y conexiones lentas.
La caché y la compresión ayudan con los recursos propios, pero no solucionan automáticamente el costo de JavaScript alojado y ejecutado por terceros. Podés complementar esta revisión con nuestra guía para activar caché del navegador y compresión en Apache.
Scripts externos y Cloudflare
Cloudflare normalmente no impide que el navegador descargue un script de otro dominio. Sin embargo, algunas optimizaciones o reglas de seguridad pueden afectar la integración.
Rocket Loader
Si Rocket Loader altera el orden o momento de ejecución de una herramienta, Cloudflare permite excluir un script concreto agregando data-cfasync="false" antes de src:
<script data-cfasync="false" src="https://cdn.ejemplo.com/herramienta.js"></script>
Utilizá esta exclusión solamente cuando hayas confirmado que Rocket Loader causa el problema. Si existen dependencias relacionadas, puede ser necesario excluirlas también.
WAF al guardar el código
Un firewall puede interpretar determinados fragmentos como un intento de inyección y bloquear la edición en WordPress. Antes de permitir una IP o desactivar protecciones, revisá el evento de seguridad, la regla coincidente, el método y la ruta.
Si se confirma un falso positivo, creá una excepción temporal y lo más específica posible. No desactives globalmente las reglas administradas ni excluyas todo /wp-admin/. Después de guardar, eliminá la excepción si ya no es necesaria.
Para conocer las funciones generales del servicio, consultá qué es Cloudflare y cuáles son sus ventajas.
Cómo comprobar que el script funciona correctamente
- Guardá una copia o punto de restauración antes del cambio.
- Agregá el código en la ubicación indicada.
- Limpiá la caché del sitio y del CDN si corresponde.
- Abrí la página en una ventana privada.
- Revisá la consola del navegador en busca de errores.
- Comprobá la pestaña Network o Red para verificar la solicitud.
- Probá las funciones principales: formularios, carrito, pagos y navegación.
- Repetí la prueba en un teléfono.
- Compará el rendimiento antes y después.
- Confirmá que la plataforma externa recibe únicamente los datos esperados.
Los bloqueadores de anuncios y las protecciones de privacidad pueden impedir que ciertas herramientas se carguen. Probá con y sin extensiones antes de concluir que el servidor presenta una falla.
Problemas frecuentes
El código aparece como texto en la página
Probablemente fue insertado en un bloque que escapa HTML o JavaScript. Utilizá el método recomendado por el CMS o un bloque de HTML personalizado autorizado.
El editor elimina parte del script
WordPress o el constructor pueden filtrar etiquetas por seguridad. No intentes ocultar el código para evitar el filtro. Utilizá un plugin confiable, un hook del tema hijo o wp_enqueue_script().
Funciona para el administrador, pero no para visitantes
Revisá diferencias de caché, consentimiento, optimización y reglas aplicadas solamente a usuarios no autenticados.
Funciona sin Cloudflare, pero falla al activarlo
Comprobá Rocket Loader, Content Security Policy, caché y eventos del WAF. Cambiá una sola configuración por vez para identificar la causa.
La consola muestra “Refused to load”
El mensaje suele indicar una restricción de CSP, contenido mixto, CORS, SRI incorrecto o un bloqueo del navegador. Leé la línea completa porque normalmente identifica la directiva o recurso afectado.
El sitio se volvió más lento
Medí cuántas solicitudes y tareas agrega la herramienta. Considerá cargarla después del consentimiento, solamente en ciertas páginas o reemplazarla por una alternativa más liviana.
El script provoca errores de JavaScript
Desactivalo temporalmente, limpiá la caché y comprobá si el error desaparece. Revisá incompatibilidades, dependencias, orden de carga y actualizaciones del proveedor.
Lista de comprobación antes de publicar
- El código proviene de la documentación oficial.
- Todas las URLs utilizan HTTPS.
- No contiene contraseñas ni claves privadas.
- Conocés los datos que recopila.
- Se carga solamente donde es necesario.
- La estrategia
asyncodeferes compatible. - Se evaluó SRI para archivos estáticos.
- La CSP contempla únicamente los orígenes necesarios.
- La política de privacidad está actualizada.
- El consentimiento se aplica antes de cargar la herramienta cuando corresponde.
- Se midió el rendimiento antes y después.
- Formularios, pagos y funciones principales continúan funcionando.
- Existe una forma rápida de revertir el cambio.
Preguntas frecuentes
¿Es seguro agregar cualquier código JavaScript?
No. Incorporá únicamente código necesario, obtenido de una fuente confiable y revisado antes de publicarlo.
¿Conviene colocar todos los scripts en el encabezado?
No necesariamente. La ubicación depende de la herramienta. Algunos códigos deben cargarse temprano y otros pueden esperar hasta el final del documento.
¿Defer siempre mejora el rendimiento?
Puede evitar el bloqueo durante el análisis del documento, pero también cambiar el momento de ejecución. Probalo antes de utilizarlo con scripts que tienen dependencias.
¿Puedo utilizar Subresource Integrity con Google Analytics o un chat?
Generalmente no cuando el proveedor modifica el archivo bajo la misma URL. SRI funciona mejor con recursos estáticos, versionados y acompañados por un hash estable.
¿Un administrador de etiquetas elimina los riesgos?
No. Facilita la gestión, pero también puede cargar múltiples scripts. Protegé el acceso, limitá los usuarios autorizados y revisá periódicamente las etiquetas publicadas.
¿Cloudflare protege automáticamente de un script externo comprometido?
No completamente. El código puede descargarse directamente desde el proveedor hacia el navegador. Utilizá controles como selección de proveedores, CSP, SRI cuando sea viable y monitoreo.
¿Debo permitir mi IP en el WAF para guardar un fragmento?
Solamente después de confirmar que se trata de un falso positivo. La excepción debería ser temporal y limitarse a la ruta, regla, método o IP estrictamente necesarios.
Conclusión
Los scripts externos ofrecen funciones útiles, pero deben tratarse como dependencias con acceso al sitio del visitante. Elegí proveedores confiables, cargá únicamente lo necesario, protegé los datos, medí el rendimiento y mantené una forma clara de desactivar cada integración.
Si una herramienta genera errores o no sabés cuál es el método apropiado para incorporarla, consultá cómo contactar al soporte técnico de Atlántica Digital.