, bien usados.
- Secciones separadas y lógicas.
### ARIA
- Solo uso ARIA cuando HTML nativo no basta.
- Estados (`aria-expanded`, `aria-selected`) sincronizados con JS.
- Etiquetas accesibles (`aria-label`, `aria-labelledby`).
### Componentes
- Acordeones y pestañas con roles completos.
- botones reales, no clicables.
### SEO y IA
- Párrafos “answer-ready” al inicio de cada sección.
- FAQ con JSON-LD.
- Listas y tablas para información clave.
## Accesibilidad e IA van de la mano
Optimizar tu web con buen HTML semántico y ARIA no solo mejora la accesibilidad: también la hace más comprensible para modelos de lenguaje como ChatGPT.
Una web clara, estructurada y accesible es más:
- Inclusiva,
- Fácil de mantener,
- Fácil de indexar,
- Y mucho más fácil de interpretar por la IA que ya domina la búsqueda moderna.
En la práctica, mejorar accesibilidad = mejorar IA-readiness.
## Referencias recomendadas
- [Documentación de OpenAI – ChatGPT Atlas.](https://help.openai.com/en/articles/12627856-publishers-and-developers-faq)
- [WAI-ARIA Authoring Practices (W3C).](https://www.w3.org/WAI/ARIA/apg/)
- [MDN Web Docs: roles, estados y propiedades ARIA.](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Guides/Techniques)
- [Guía oficial de accesibilidad WordPress.](https://developer.wordpress.org/themes/classic-themes/functionality/accessibility/)
- [Recursos de Schema.org y JSON-LD.](https://schema.org/)
---
# Limpiar el HTML que copias de ChatGPT (y como hacerlo)
Source: https://yaggoseo.com/limpiar-el-html-que-copias-de-chatgpt-y-como-hacerlo/
---
title: "Limpiar el HTML que copias de ChatGPT (y como hacerlo)"
date: 2025-12-26T19:13:22+01:00
modified: 2026-08-16T20:46:22+02:00
author: "Yago Vázquez Gómez"
source: https://yaggoseo.com/limpiar-el-html-que-copias-de-chatgpt-y-como-hacerlo/
canonical: https://yaggoseo.com/limpiar-el-html-que-copias-de-chatgpt-y-como-hacerlo/
description: "Actualizado agosto 2026: Claude marca texto e imágenes; Google lee C2PA en Search; el plugin (v1.8.5) limpia más HTML y audita metadatos de imágenes sin borrar credenciales por defecto. Si trabajas con LLMs (ChatGPT, Claude, Gemini, etc.) para redactar, resumir..."
categories:
- "llms"
---
# Limpiar el HTML que copias de ChatGPT (y como hacerlo)
> Actualizado agosto 2026: Claude marca texto e imágenes; Google lee C2PA en Search; el plugin (v1.8.5) limpia más HTML y audita metadatos de imágenes sin borrar credenciales por defecto.
Si trabajas con LLMs (ChatGPT, Claude, Gemini, etc.) para redactar, resumir o estructurar contenido, hay un detalle que casi nadie mira: cuando copias y pegas, a veces no pegas solo texto. **Pegas rastros (Incluso con API)**.
## LLM Trace Cleaner: por que deberías limpiar el HTML que copias de ChatGPT (y como hacerlo en WordPress)
Rastros en forma de atributos **HTML ocultos** (data-…), referencias incrustadas tipo** `oaicite`**, parámetros UTM en enlaces y caracteres invisibles que no ves, pero que se quedan en tu código. En el editor parece todo correcto. En el HTML publico, es otra historia.
**LLM Trace Cleaner** es un plugin de WordPress creado para eso: eliminar automáticamente esos rastros y dejar tu contenido limpio, ligero y bajo control.
## Que son los rastros ocultos de los LLMs
Algunas interfaces de LLM, editores intermedios y flujos de copy/paste **meten metadatos en el HTML para su propio tracking interno**: estructura del mensaje, marcadores de inicio/fin, IDs, modelo usado, timestamps, etc. Nada de eso aporta valor a tu usuario final.
Y aun peor: hay rastros que **pueden filtrar información sensible** o, como mínimo, dejar señales innecesarias sobre tu flujo de trabajo (de donde viene el contenido, como se generó, con que herramienta, etc.).
| Tipo de rastro | Ejemplos comunes | Por que es un problema |
| -------------- | ---------------- | ---------------------- |
| Atributos HTML ocultos | data-start, data-end, data-llm-id, data-message-id, data-model, etc. | Engorda el HTML, mete ruido en el DOM y puede exponer metadatos que no quieres publicar. |
| Referencias incrustadas en el texto | ContentReference [oaicite:=0](index=0), [oaicite:0], etc. | Ensucia el contenido y deja marcas obvias del origen. |
| Tracking en enlaces | utm_source=chatgpt.com, utm_medium=chat, y cualquier utm_* | URLs mas feas, menos consistentes, y de regalo: expone el origen. |
| Caracteres invisibles | Zero-width, bidi controls, selectores de variacion, etc. | Se cuelan sin que lo veas, pueden romper cosas raras y servir como marcas invisibles. |
Traducción: si produces contenido a escala (o simplemente publicas mucho), esto se convierte en **«basura técnica acumulada»**. Y en WordPress, la basura técnica siempre acaba saliendo cara: problemas de cache, editores, migraciones, render, rastreo, etc.
## Ventajas de limpiar esos datos (y por que debería importarte)
### 1) HTML mas ligero (y un DOM mas sano)
Menos atributos y menos ruido implica menos peso y menos complejidad. No es magia, es higiene: tu contenido queda mas limpio, mas fácil de procesar y mas estable a futuro.
### 2) Mejor control de privacidad
Hay atributos que directamente **no deberían salir a producción en una web pública**. Algunos pueden correlacionar sesiones, conversaciones o contexto. Otros son «solo» metadatos, pero igual: si no aporta valor al usuario, fuera.
### 3) Menos señales innecesarias sobre tu flujo de contenido
Si publicas enlaces con `**utm_source=chatgpt.com**` o dejas referencias `**oaicite**`, estas dejando migas de pan. No es que el mundo se acabe, pero estas regalando señales que no controlas y que no suman.
### 4) Menos problemas raros con editores, buscadores internos y accesibilidad
Los caracteres invisibles son el típico enemigo silencioso: no los ves hasta que buscas una palabra y no aparece, copias un texto y se «rompe», o un bloque se comporta raro. Mejor eliminarlos antes de que se conviertan en una tarde perdida.
### 5) Limpieza recurrente sin depender del «cuidado humano»
La realidad: si hay varias personas publicando (o tu publicas con prisa), confiar en que todo el mundo va a pegar en modo texto plano es un chiste. Necesitas un guardarraíl. Para eso esta el plugin.
## ¿Qué hace LLM Trace Cleaner exactamente?
LLM Trace Cleaner limpia el contenido HTML de entradas y paginas en WordPress eliminando:
- Atributos de rastreo (data-…) que suelen colarse desde herramientas LLM.
- IDs generados con patrones típicos de algunas respuestas pegadas.
- Referencias incrustadas tipo** `oaicite`**.
- Parámetros `utm_*` en enlaces **(incluyendo `utm_source=chatgpt.com`)**.
- Caracteres invisibles (por ejemplo, zero-width y controles de direccion) que pueden actuar como marcas o causar problemas.
Ademas, incluye:
- **Limpieza automática** (opcional) al guardar entradas/paginas.
- **Limpieza manual** para escanear y limpiar contenido existente.
- **Procesamiento por lotes** con barra de progreso (para evitar timeouts en sitios grandes).
- **Logging** completo de lo que se encontró y elimino.
- **Gestion inteligente de cache** y compatibilidad con plugins populares (LiteSpeed, WP Rocket, W3TC, etc.).
- **Opción de desactivar cache para bots/LLMs** cuando acceden al sitio (configurable).
- **Telemetria anonima opt-in** (si quieres aportar datos agregados para investigación; el plugin funciona igual sin ella).
- **Actualizaciones directas desde GitHub** (sin depender de instalaciones manuales constantes).
Detalle importante: en el **changelog **se indica que se mejoro **la limpieza de UTM y caracteres invisibles** dentro de bloques de Gutenberg y page builders, para evitar que se reintroduzcan al restaurar bloques. Esto es clave si publicas con **Elementor, Divi, Bricks, WPBakery** y compañía.
### Ejemplo rápido: el tipo de basura que evita
Antes de ver el ejemplo, quédate con esta idea: cuando copias desde un LLM, a veces **el texto viene “envuelto”** en metadatos que no ves en el editor **(atributos `data-*`, IDs internos),** y los enlaces pueden traer tracking (UTMs) que tampoco aporta nada al usuario.
En pantalla parece limpio, pero en el HTML se queda ese ruido.
Este bloque muestra, de forma muy simplificada, el tipo de “basura” que el plugin elimina y como debería quedar el código final listo para publicar.
`
Texto normal que parece limpio.
Enlace
Texto normal que parece limpio.
Enlace
`
## Tutorial rápido: instalar, configurar y limpiar tu sitio
### Requisitos
- WordPress 5.0 o superior
- PHP 7.4 o superior
- Extensión PHP DOMDocument (recomendada, no obligatoria)
### Paso 1: instalar el plugin
#### Opción A: instalación desde ZIP (la mas cómoda)
- Descarga el ZIP del repositorio.
- En WordPress, ve a **Plugins > Anadir nuevo**.
- Haz clic en **Subir plugin**.
- Selecciona el ZIP y pulsa **Instalar ahora**.
- Activa el plugin.
#### Opción B: instalación manual
- Descarga o clona el repositorio.
- Sube la carpeta `llm-trace-cleaner` a `/wp-content/plugins/`.
- Activa el plugin desde el menú **Plugins**.
Cuando este activo, entra en: **Herramientas > LLM Trace Cleaner**.
### Paso 2: configuración inicial
- Ve a **Herramientas > LLM Trace Cleaner**.
- En la sección **Configuración**, activa o desactiva **limpieza automática** según tu flujo.
- Guarda los cambios.
### Paso 3: limpieza automática (opcional, pero recomendada si publicas a menudo)
Si activas la limpieza automática:
- El contenido se limpia cada vez que guardas una entrada o pagina.
- Se registra el cambio en el log.
- La cache se limpia tras cada modificación (si aplica).
### Paso 4: limpieza manual del contenido existente (ideal para la primera vez)
- Ve a **Herramientas > LLM Trace Cleaner**.
- En **Limpieza manual**, haz clic en **Escanear y limpiar contenido ahora**.
- El proceso corre en lotes para evitar sobrecargar el servidor.
- Sigue la barra de progreso.
- Al finalizar veras un resumen: posts analizados, posts modificados y detalle de lo eliminado.
### Paso 5: revisa el log (para auditar, no por ansiedad)
- En la misma pantalla, entra en **Registro de actividad**.
- Veras las ultimas acciones (y paginación si hay mas).
- Puedes vaciar el log o descargar el archivo completo si necesitas una auditoria.
### Paso 6 (opcional): gestión de cache y bots/LLMs
El plugin incluye gestión inteligente de cache:
- Durante la limpieza: puede desactivar cache para evitar interferencias.
- Después de modificar posts: limpia cache del post modificado.
- Al finalizar: limpia cache general del sitio para reflejar cambios.
Y si quieres ir un paso mas allá, puedes activar **Desactivar cache para bots/LLMs**:
- Ve a **Herramientas > LLM Trace Cleaner**.
- Activa la opción **Desactivar cache para bots/LLMs**.
- Selecciona los bots/LLMs que quieres detectar.
- Opcional: agrega bots personalizados (uno por línea).
- Guarda la configuración.
## Por que es importante marcar «Compartir estadísticas anónimas»
Esta opción no esta ahí por postureo. Si quieres que el plugin (y todo el ecosistema) mejore de verdad, **marcar la casilla de «Compartir estadísticas anónimas»** es la palanca mas directa. Estamos hablando de investigar y medir, con datos reales, **como los LLMs marcan el contenido** cuando copias y pegas, que rastros aparecen con mas frecuencia y como evolucionan con el tiempo.
En la documentación del plugin queda claro que la telemetría es **opt-in** (**solo se activa si tu la marcas**) y que **no afecta a la funcionalidad**: el plugin limpia igual aunque no compartas nada. Entonces, por que activarla?
Porque sin datos agregados a escala, esto **se queda en «me suena que pasa» en lugar de «tenemos evidencia, patrones y prioridades claras»**.
### Que se envía (y que NO) cuando activas la casilla
| Si se recopila (anónimo y agregado) | No se recopila (nunca) |
| ------------------------------------ | ---------------------- |
| Numero total de paginas procesadas Numero de paginas con datos ocultos detectados Tipos de atributos y caracteres invisibles encontrados (por ejemplo: data-start, data-llm, unicode: Zero Width Space) Contadores por tipo de rastro encontrado Version del plugin, WordPress y PHP (para compatibilidad) | URLs de tu sitio Títulos de posts o paginas IDs de posts Contenido del sitio Información personal o sensible Datos que puedan identificar tu sitio o tus usuarios |
Además, el plugin indica que el envio se hace **de forma segura (HTTPS)** y que los datos se almacenan **de manera agregada**, de forma que no se puede identificar un sitio individual a partir de lo recopilado.
### Para que sirve (lo util, no lo bonito)
- **Investigación y estudios**: publicar análisis reales sobre que «datos ocultos» están metiendo los LLMs en el HTML y como cambian por herramienta, tiempo y contexto.
- **Análisis de tendencias**: saber que rastros son mas comunes (y cuales están apareciendo «nuevos») para no ir siempre por detrás.
- **Mejora del plugin**: priorizar que atributos y caracteres eliminar primero, que casos dan mas problemas, y donde hay que reforzar la limpieza (Gutenberg, builders, decodificaciones raras, etc.).
- **Mejora de procesos**: no solo «limpiar», sino entender el fenómeno para ajustar flujos editoriales, plantillas, QA y automatizaciones.
- **Estudios sobre buscadores**: analizar a nivel agregado como se cruza todo esto con rastreo, render y consumo de contenido en la era LLM.
### Control total: tu decides, cuando quieras
- **Opt-in explicito**: si no marcas la casilla, no se envía nada.
- **Desactivable en 1 clic**: puedes desmarcarla cuando quieras.
- **Sin impacto funcional**: el plugin funciona igual sin telemetría.
**En resumen:** si te interesa que salgan estudios serios sobre estos rastros (y no opiniones), y que el plugin se mantenga al día conforme los LLMs cambian sus «marcas», marcar **«Compartir estadísticas anónimas**» es contribuir con el mínimo esfuerzo y el máximo impacto.
## Actualizaciones agosto 2026
En diciembre de 2025 el problema era claro: copias de ChatGPT (o Claude, o Gemini) y, sin verlo, te llevas `data-start`, `oaicite`, UTMs y caracteres invisibles. Eso sigue pasando. Lo que ha cambiado en agosto de 2026 es el tablero alrededor.
Por un lado, Anthropic publica cómo Claude marca lo que genera: una marca estadística en el texto y credenciales C2PA en archivos. Por otro, Google ya documenta que Search puede leer C2PA y mostrar en «About this image» si una foto se creó o se editó con IA. En el medio, IPTC lleva años con un vocabulario (`trainedAlgorithmicMedia`) que C2PA y Google usan como señal de origen.
LLM Trace Cleaner (ahora en v1.8.5) se actualizó para ese escenario. Misma regla de siempre: esto no es para «ocultar que usas IA». Es para no publicar basura de pegado, no romper emoji ni árabe al limpiar Unicode, y no reventar por accidente una credencial de procedencia que Google (o un cliente) sí quiere ver.
El plugin está en [GitHub](https://github.com/YaggoSEO/llm-trace-cleaner). Si ya lo tenías, actualiza desde el panel (actualizaciones GitHub) y lee el recuadro «¿Cómo funciona el módulo de imágenes?» en *LLM Trace Cleaner → Imágenes*.
### Tres capas que la gente mezcla (y no son lo mismo)
| Capa | Quién la publica | Qué es, en cristiano | ¿Lo limpia el plugin? |
| ---- | ----------------- | --------------------- | ---------------------- |
| Basura de copy/paste | ChatGPT, Claude, Gemini, editores intermedios | data-*, oaicite, utm_source=chatgpt.com, zero-width huérfanos, data-ai-*, JSON-LD de «me he colado» | Sí. Es el núcleo del plugin. |
| Marcado de procedencia en archivos | C2PA / Content Credentials; Claude en PNG/JPG/SVG; cámaras y editores (Pixel, Adobe, etc.) | Un manifiesto firmado en el archivo. Google puede extraerlo en Search. | No lo borra. Lo detecta y, por defecto, detiene el saneamiento. |
| Watermark estadístico en el texto | Claude (modelos desde el 2 ago 2026); técnica tipo [SynthID-Text](https://www.anthropic.com/news/claude-text-watermark) (DeepMind) | No hay caracteres ocultos. El modelo sesga elecciones de palabras. Viaja con el copy/paste. | No. No hay nada que «quitar» del HTML. Un cleaner de Unicode no toca eso. |
Si alguien te vende «quitar el watermark de Claude limpiando Unicode», te está vendiendo humo. Anthropic lo dice sin rodeos: no se añade nada al texto, no hay caracteres ocultos.
### El marcado de Google: C2PA, IPTC y «About this image»
Google no te pide que ensucies el HTML con `data-llm-id`. Te pide transparencia útil y, en imágenes, usa estándares de la industria.
En la documentación de Search Central ([metadatos de imagen](https://developers.google.com/search/docs/appearance/structured-data/image-license-metadata)), Google explica que si una imagen trae metadatos C2PA, puede extraerlos y mostrar en «About this image» cómo se creó o si se editó con herramientas de IA. Condiciones: el firmante usa C2PA 2.1+ y el manifiesto va firmado con un certificado de una CA de la [C2PA Trust List](https://developers.google.com/search/docs/appearance/structured-data/image-license-metadata).
Eso encaja con lo que Google viene publicando como miembro del steering committee de C2PA: [Content Credentials en Pixel / Android](https://blog.google/security/pixel-android-trusted-images-c2pa-content-credentials/) y herramientas para [identificar media generada con IA](https://blog.google/innovation-and-ai/products/identifying-ai-generated-media-online/). Traducción práctica para una web WordPress:
- Un JSON-LD de artículo (`Article`, titular, autor) es schema normal. El plugin lo deja.
- Un JSON-LD de `ImageObject` con `digitalSourceType` / `trainedAlgorithmicMedia` / `SoftwareAgent` pegado desde un LLM es ruido de procedencia en el HTML. El plugin quita ese bloque.
- Un manifiesto C2PA dentro del JPEG/PNG es otra cosa: Google puede enseñarlo en Search. El plugin no lo strippea en silencio.
El vocabulario que verás una y otra vez es el de IPTC: [`trainedAlgorithmicMedia`](https://cv.iptc.org/newscodes/digitalsourcetype/trainedAlgorithmicMedia) («creado con IA generativa») y variantes como `compositeWithTrainedAlgorithmicMedia` (foto real + IA). IPTC lo recomienda en XMP o dentro del manifiesto C2PA. C2PA lo usa como señal principal de si el asset es sintético.
Importante para SEO: quitar EXIF de GPS o un `data-start` no es lo mismo que borrar Content Credentials para que Google «no te pille». Lo segundo invalida una firma, puede ser engañoso y no es el trabajo de este plugin. Si la imagen es generada o editada con IA y te interesa la transparencia (o te aplica normativa), la conversación es editorial y de procedencia, no de «limpiar el HTML».
### Claude, agosto 2026: dos marcas, no las mezcles
Anthropic lo documentó el 14 de agosto de 2026 en [How Claude’s text watermark works](https://www.anthropic.com/news/claude-text-watermark) y en el [Help Center](https://support.claude.com/en/articles/16266773-how-claude-marks-ai-generated-content). Resumen sin teatro:
1) Texto: watermark estadístico (no Unicode)Los modelos Claude lanzados el 2 de agosto de 2026 o después marcan el texto en el propio muestreo de palabras (enfoque tipo SynthID-Text). Cumplen el [Código de prácticas de transparencia](https://support.claude.com/en/articles/16266773-how-claude-marks-ai-generated-content) del artículo 50 del AI Act de la UE; lo aplican en todo el mundo porque aún no pueden limitarlo por región. Vale para API, claude.ai, Claude Code, etc.
Qué implica para tu WordPress:
- Copiar y pegar se lleva la marca. No hay `ZWSP` que borrar.
- Una corrección ligera de estilo casi no deja señal. Un texto largo generado por Claude, sí.
- Un rewrite fuerte o una traducción hecha por un humano la diluye. Una traducción hecha por Claude vuelve a marcar, porque cada palabra la elige el modelo.
- Detectar la marca no prueba autoría. Solo que Claude pudo intervenir. Anthropic promete una API de detección; aún no es un detector público milagroso.
LLM Trace Cleaner no elimina esa marca. Ni lo pretende. Si tu flujo es «Claude redacta el post entero y lo pego», el HTML quedará limpio de `data-*` y el texto seguirá siendo texto de Claude. Eso es coherente con el tip de este artículo: no uses el plugin para fingir que no hay IA.
2) Archivos: C2PA de verdadCuando Claude genera un `.png`, `.jpg` o `.svg` soportado, adjunta Content Credentials firmadas (C2PA). Eso sí es metadato de archivo, no magia en el píxel. Se puede perder al reconvertir, al reguardar en un editor que no lo entiende, o al hacer una captura. El módulo de imágenes del plugin lo detecta (chunk PNG `caBX`, JPEG APP11/JUMBF) y, con «Detener ante C2PA» (activado de fábrica), no toca el archivo.
3) Lo de siempre: rastros de interfazAunque Claude marque «por dentro» el texto, las UIs y el pegado siguen soltando HTML sucio: `data-ai-*`, `meta generator` de vendor, Unicode huérfano, JSON-LD de más. Eso sí lo limpia el plugin. No confundas las tres cosas en la misma frase.
### HTML: lo que el plugin limpia ahora (v1.8.3 y v1.8.4)
Además de `data-start`, `oaicite` y UTMs (eso no se ha ido):
Unicode contextual (v1.8.3). Antes, borrar a ciegas zero-width y selectores de variación rompía emoji (👨👩👧, ⚖️) y podía destrozar árabe/hebreo (ZWNJ, bidi). Ahora:
- Quita marcas huérfanas (ZWSP, BOM, RLO suelto, tags Unicode, etc.).
- Conserva el pegamento de emoji, ZWNJ en escrituras complejas y bidi emparejado.
- Normaliza espacios «raros» (em space, ideográfico…) a espacio normal. El ` ` de WordPress se queda, salvo que actives la opción de normalizarlo.
- El análisis previo cuenta lo que se iba a limpiar, no el ZWJ de un emoji.
Procedencia en el HTML (v1.8.4).
- Atributos `data-ai` y `data-ai-*` (`data-ai-generated`, `data-ai-model`…). Prefijo estricto: no toca `data-air` ni `data-foo`. También dentro de bloques Gutenberg.
- JSON-LD `application/ld+json` con `DigitalSourceType`, `trainedAlgorithmicMedia` o `SoftwareAgent`: fuera el bloque. Un `Article` normal: se queda.
- ` ` (Claude, Gemini, Midjourney…): fuera. `WordPress` y `Elementor`: se quedan. El CMS no es un LLM.
Si publicas con Elementor, Divi, Bricks, etc., esto sigue aplicándose dentro de los bloques antes de restaurarlos. El fallo clásico de «limpio y al guardar vuelve el UTM» ya estaba cubierto; ahora también el `data-ai` pegado en un bloque HTML.
### Imágenes: auditoría, perfiles y C2PA que no se borra (v1.7 a v1.8.5)
Nuevo menú: LLM Trace Cleaner → Imágenes. El módulo nace apagado, con dry run y backup activos. No es un «quita-marcas en el píxel». Es gobierno de metadatos: GPS, serie, prompts/workflows, autoría legítima (la que tú escribes), no inventar cámara ni coordenadas.
Puede:
- Auditar EXIF / IPTC / XMP (Imagick en compartido; ExifTool opcional solo VPS).
- Aplicar perfiles: privacidad, corporativo, SEO local, fotografía, imagen generada/editada con IA. El SEO local usa ubicación mostrada, no GPS de captura.
- Ver hints XMP tipo `digitalSourceType`, `trainedAlgorithmicMedia`, `AIGC`.
- Detectar C2PA de verdad, no un `grep` a 64 KB que dispara con basura comprimida.
Confianza C2PA (lo que verás en el informe):
| Confianza | Qué significa | ¿Se detiene el saneamiento? |
| --------- | -------------- | ---------------------------- |
| confirmed | Contenedor embebido: PNG caBX (o juMB / C2PA) o JPEG APP11 con JUMBF. | Sí, si «Detener ante C2PA» está activo (por defecto). |
| probable | Mención en EXIF/XMP/texto, sin contenedor confirmado. | Sí, con la misma opción. |
| informational | Aviso: *soft-binding*, o un APP11 genérico (JPEG 360) sin JUMBF. | No. |
No se busca la cadena `c2pa` dentro del pixel data (IDAT / SOS). Una coincidencia de bytes no es una credencial.
El informe avisa del soft-binding: quitar EXIF no borra una marca en el píxel ni un manifiesto remoto. El plugin no valida la firma criptográfica (eso es `c2patool` u otro validador; no va en el núcleo) y no promete indetectabilidad ni borra SynthID.
En hosting compartido pide Imagick. ExifTool no es una extensión PHP: si no está, el plugin no se cae.
### Cómo usarlo si ya tenías el plugin
- Actualiza a 1.8.5 (el updater de GitHub del propio plugin).
- En Herramientas > LLM Trace Cleaner, lanza una limpieza manual del contenido viejo: pillará `data-ai*`, JSON-LD de procedencia y Unicode huérfano que la versión anterior no tocaba igual.
- Revisa la opción de normalizar NBSP (off por defecto). Si tu maquetación vive de ` `, no la actives.
- En Imágenes: deja el módulo desactivado hasta que hagas un dry run de un adjunto. Si el informe dice C2PA confirmed/probable, no proceses a lo loco.
- Si usas offload a S3 sin archivo local, el módulo te dirá `unsupported_remote_storage`. No hay magia.
### Qué no hace (y qué no debería vender nadie)
- No convierte un texto de Claude en «texto humano» ni quita el watermark estadístico.
- No borra SynthID ni marcas en el píxel.
- No strippea C2PA por debajo de la mesa para esquivar «About this image».
- No inventa EXIF de cámara para disfrazar una imagen generada.
- No sustituye una divulgación editorial («este gráfico está generado con IA») cuando la debas hacer.
La frase de siempre sigue siendo la correcta: usar LLMs está bien. Publicar rastros innecesarios, no. En 2026 hay que añadirle la coda: tampoco borres la procedencia seria para parecer «más original». Limpia el pegado. Respeta (o gestiona a propósito) las credenciales. Y si Claude escribió el artículo, el HTML limpio no convierte eso en otra cosa.
## Tips y buenas practicas (modo YaggoSEO)
- **Esto no es para «ocultar que usas IA».** Esto es para no publicar basura técnica. Punto.
- **Haz una limpieza manual la primera vez** y luego activa la automática si tu flujo es de copy/paste frecuente.
- **Si usas page builders**, este tipo de limpieza es aun mas importante porque el HTML ya es denso de por si.
- **Menos ruido = mejor mantenimiento.** Migraciones, caches, minificaciones y editores se llevan mejor con HTML limpio.
- **Publica como si tu HTML lo fuese a leer alguien.** Porque lo va a leer: bots, scrapers, LLMs, Agentes IA, revisores, tu yo del futuro.
## Preguntas frecuentes (FAQ)
## Descarga y soporte
Puedes ver el repositorio del plugin aquí:
[DESCARGA EL PLUGIN AQUÍ](https://github.com/YaggoSEO/llm-trace-cleaner)
Si te sirve:
- Dale una estrella en GitHub (es gratis y ayuda) y en Truspilot.
- Reporta issues con ejemplos reales (mejor aun si adjuntas el HTML antes/después).
- Si eres dev, PRs bienvenidas.
> **Moraleja:** usar LLMs esta bien. Publicar rastros innecesarios, **no**. Limpia y sigue. Feliz Navidad y Felices Fiestas.
---
# Caso Estudio 2: cómo Chat GPT-5 clasifica negocios locales
Source: https://yaggoseo.com/como-chat-gpt5-clasifica-negocios-locales/
---
title: "Caso Estudio 2: cómo Chat GPT-5 clasifica negocios locales"
date: 2025-08-21T20:55:09+02:00
modified: 2026-08-03T22:18:28+02:00
author: "Yago Vázquez Gómez"
source: https://yaggoseo.com/como-chat-gpt5-clasifica-negocios-locales/
canonical: https://yaggoseo.com/como-chat-gpt5-clasifica-negocios-locales/
description: "Autores: Equipo de análisis (YaggoSEO y sus Neuro divergencias) (Agosto 2025). Comparativa: Clasificación de Negocios Locales en GPT-4 vs GPT-5 Este artículo compararemos el funcionamiento de Chat GPT en su versión GPT-5, según el estudio anterior cómo Chat GPT-4 clasifica..."
categories:
- "Casos de estudio"
---
# Caso Estudio 2: cómo Chat GPT-5 clasifica negocios locales
**Autores**: Equipo de análisis (YaggoSEO y sus Neuro divergencias) (Agosto 2025).
## Comparativa: Clasificación de Negocios Locales en GPT-4 vs GPT-5
Este artículo compararemos el **funcionamiento de Chat GPT** en su versión GPT-5, según el estudio anterior [cómo Chat GPT-4 clasifica negocios locales](https://yaggoseo.com/como-chat-gpt-clasifica-negocios-locales/) (GPT-4).
Con los resultados observados en **GPT-5** para la búsqueda **«mejores tortillas A Coruña» y múltiples consultas similares **(tiendas, negocios, profesionales etc.). Todas siguiendo el mismo patrón de Prompt, modelo de gpt etc.
Primero os dejo una tabla comparativa, un diagrama del flujo de datos y una explicación sobre las **posibles APIs y bases de datos** que GPT-5 podría estar utilizando a día de hoy.
## Tabla Comparativa de Modelos LLMs
| **Aspecto** | **GPT-4 (estudio YaggoSEO anterior)** | **GPT-5 (estudio actual)** 09/08/2025 |
| ----------- | ------------------------------------- | ------------------------------------- |
| Proceso de obtención | Lanza 1 búsqueda en Bing (`web.search`), filtra por safe_urls, consulta Foursquare y scraping de Google Maps. | Lanza búsqueda web en tiempo real consultando múltiples fuentes abiertas, incl. prensa local, blogs, TripAdvisor, webs oficiales y rankings. |
| Orden de resultados | Depende del tiempo de respuesta del proveedor (el que responde primero aparece primero). No reordena por relevancia. | Agrupa y ordena de forma temática (premios, rankings, innovación) sin depender del orden de llegada. |
| Fuentes principales | Predominio de Foursquare y Google Maps (whitelist cerrada). | Fuentes diversas: medios, blogs, TripAdvisor, webs oficiales y rankings. |
| Tipo de datos | Ficha básica: nombre, dirección, rating, precio, teléfono. | Ficha enriquecida + narrativa: historia, premios, estilo, contexto gastronómico, tabla de recomendaciones. |
| Interfaz de salida | `businesses_map` simple con info cruda. | `businesses_map` con análisis textual, tabla comparativa y explicaciones para decidir. |
| Actualización temporal | Limitada a cambios en las fuentes whitelisted. | Incluye noticias recientes (2024-2025) y eventos recientes. |
| Interpretación propia | No interpreta ni jerarquiza más allá del orden de llegada. | Curación activa: selecciona, ordena y agrupa según criterios propios (premios, popularidad, innovación, variedad). |
### Flujo comparado
#### GPT-4 (según tu estudio previo)
- `web.search()` (Bing)
- Filtro por **safe_urls** (lista blanca)
- Llamadas en paralelo a proveedores (p. ej., Foursquare rápido; scraping de Google Maps más lento)
- **Inserción por orden de llegada** en el widget (no hay `sort` global).
> Consecuencia: el orden visible depende en gran parte de la **latencia** de cada proveedor.
#### GPT-5 (reconstruido a partir del archivo adjunto)
- Meta-búsqueda en paralelo (no depende de un único buscador)
- **safe_urls** + recopilación de múltiples fuentes (directorios + prensa/blogs)
- **Normalización** y **deduplicación** por NAP
- **Enriquecimiento** (premios, noticias, reseñas)
- **Presentación** en `businesses_map` + **narrativa editorial** (agrupa por premios/innovación/popularidad).
El mapa suele reflejar el orden base de llegada de proveedores,
- **pero el texto y las tablas** ya vienen **ordenadas/editorializadas**.
Evidencias de campos y proveedores en tu salida GPT-5: presencia de `businesses_map`, proveedores `foursquare`/`serp`, y campos como `rating`, `review_count`, `price_str`, `hours`, `phone`, `business_fallbacks`, `safe_urls`, `cite_map`
## Posible Pseudocódigo de ejemplo
> Nota: **no es el código interno de OpenAI** (no es público). Es **pseudocódigo** que modela el comportamiento observado para explicar/entender la diferencia entre GPT-4 y GPT-5 más fácilmente.
### GPT-4 (baseline del estudio anterior)
`def build_local_list_gpt4(query):
results = web.search(query) # Bing
urls = filter_safe_urls(results) # whitelist
# Proveedores en paralelo:
fut = [
fetch_foursquare(query), # rápido
scrape_google_maps_serp(query) # más lento
]
items_stream = as_completed(fut) # llega lo primero que responda
businesses = []
for item in items_stream:
businesses.extend(item) # SIN sort global
return businesses_map(businesses) # orden = llegada
`
### GPT-5 (flujo reconstruido posible)
`def build_local_list_gpt5(query):
# 1) Meta-búsqueda y filtrado
candidates = parallel_fetch([
search_engines(query), # meta (no 1 solo motor)
fetch_directories(query), # Foursquare/TripAdvisor/Yelp...
crawl_media_and_blogs(query), # prensa/blogs recientes
])
candidates = filter_safe_urls(candidates) # safe_urls
# 2) Normalización y deduplicación por NAP
entities = normalize(candidates) # {name, address, phone, lat, lng, ...}
entities = dedupe_by_nap(entities)
# 3) Enriquecimiento de atributos
for e in entities:
e.signals = gather_signals(e) # ratings, premios, noticias, horarios
# 4) Presentación dual
# 4a) Mapa: respeta en gran medida el orden de llegada de proveedores (para “poblar” rápido)
map_items = preserve_arrival_order(entities)
# 4b) Narrativa/tabla: aplica ranking editorial híbrido
editorial = sort_by([
semantic_relevance(query),
source_authority(), # medios/dirs confiables
recency_signals(), # premios/noticias recientes
diversity_bucket(), # variedad de estilos
popularity_scores(), # ratings, reseñas multi-plataforma
], entities)
return {
"businesses_map": map_items,
"analysis": editorial_to_text(editorial),
"tables": build_comparison_table(editorial)
}
`
## Flujo de Búsqueda y Ranking en GPT-5
GPT-5 **ya no depende únicamente de un buscador como Bing**, sino que utiliza un **servicio de búsqueda interno (Sonic) **que actúa como meta-buscador.
Este sistema consulta** varias fuentes en paralelo**, mezcla sus resultados y aplica un ranking editorial antes de presentarlos al usuario.
### Fuentes que Consulta GPT-5
| **Tipo de fuente** | **Método probable de obtención** | **Ejemplos** |
| ------------------ | ---------------------------------- | ------------ |
| Buscadores tradicionales | API o scraping indirecto | Google, Bing |
| Agregadores y directorios | API o scraping directo | Foursquare, TripAdvisor, Yelp |
| Medios y blogs | Scraping en tiempo real o indexado previo | El País, El Español, prensa local |
| Datos estructurados | APIs o bases de datos públicas/privadas | Google Business Profiles, catálogos gastronómicos, datasets |
| Bases internas | Base de datos acumulada de consultas anteriores | Fichas previas de negocios |
## Criterios de Ranking en GPT-5
A diferencia de GPT-4, que **ordenaba los negocios según la velocidad de respuesta** de cada proveedor, GPT-5 aplica un ranking editorial híbrido que combina:1. Relevancia semántica de la descripción respecto a la consulta.2. Autoridad de la fuente, priorizando medios y directorios confiables.3. Recencia, favoreciendo menciones y premios recientes.4. Diversidad de estilos o categorías para cubrir distintos perfiles.5. Popularidad medida por puntuaciones y reseñas en diversas plataformas.
### Esquema del Flujo de Datos en GPT-5
Consulta del usuario → Servicio de búsqueda interno (meta-buscador) → Fuentes múltiples en paralelo (buscadores, directorios, medios, datos internos) → Normalización y fusión de duplicados → Enriquecimiento con premios y noticias → Ranking editorial (relevancia, autoridad, recencia, diversidad, popularidad) → Agrupación por categorías → Presentación final (businesses_map + narrativa + tablas).
`Consulta del usuario
↓
Servicio de búsqueda interno (meta-buscador)
↓
┌───────────────┬──────────────┬───────────────┬─────────────────┐
│ Buscadores │ Directorios │ Medios/blogs │ Datos internos │
│ (Google/Bing) │ (Foursquare, │ (Prensa local │ (Base histórica)│
│ │ TripAdvisor) │ y nacional) │ │
└───────────────┴──────────────┴───────────────┴─────────────────┘
↓
Recopilación paralela → Normalización de datos → Fusión de duplicados
↓
Enriquecimiento (premios, noticias, reseñas)
↓
Ranking editorial (relevancia, autoridad, recencia, diversidad, popularidad)
↓
Agrupación por categorías
↓
Presentación final (businesses_map + narrativa + tablas)
`
## Bases de Datos Públicas, Privadas y Grafos Utilizados por GPT-5 (Posibles)
> **Aviso:** esta lista es inferida por comportamiento observado y no ha sido publicada oficialmente por OpenAI.
Aunque OpenAI** no ha revelado una lista oficial de las bases de datos** que utiliza GPT-5 para clasificar negocios locales, por el patrón de sus respuestas y las coincidencias con datos provenientes de terceros, es posible inferir qué orígenes pueden intervenir en sus procesos.
### Bases de Datos Públicas
- **Common Crawl**: índice web abierto con terabytes de páginas que permiten extraer menciones, direcciones y reseñas históricas.
- **Datos abiertos gubernamentales**: directorios de empresas o licencias publicadas por ayuntamientos y organismos oficiales.
- **OpenStreetMap**: base de datos geográfica y de puntos de interés (POIs).
- **Wikipedia / Wikidata**: datos generales y estructurados sobre empresas, ubicaciones y categorías.
En la mayoría de las consultas **Wikipedia entra en el Recall** pero no pasa a evidencia citada, además en KW muy ambiguas **añade «entidades»** que no se corresponden con la búsqueda (típico de la página de desambiguación de wiki). Eso sí, la cosa cambia cuando la búsqueda es de tipo **«Background de Marca»**, ahí si wikipedia pasa el Recall. En este caso Wikipedia ofrece una **ficha consolidada y neutra** por eso el sistema la prefiere como respaldo rápido frente a blogs o tiendas. Wikipedia para los LLMs es una fuente fiable como lo era para Google en su momento. (Como dice la gran Olga Ortega: ‘Red Links – Good Luck’)
### Bases de Datos Privadas / Comerciales
- **Data Axle (antes InfoGroup)**: base de datos de negocios con NAP (Name, Address, Phone) y categorías.
- **SafeGraph**: datos de localización y patrones de visita a negocios.
- **DataProvider.com**: inventario global de empresas y sitios web con metadatos comerciales.
- **Yelp Fusion API**: reseñas y valoraciones.
- **TripAdvisor API**: reseñas turísticas y gastronómicas.
- **Foursquare Places API**: listados y geolocalización de negocios.
- **Google Places API**: horarios, reseñas y puntuaciones.
- **Bing Places API**: datos de negocio con cobertura diferente a Google.
### Datos Internos y Grafos de Conocimiento
GPT-5 también** parece alimentarse de datos indexados internamente** por OpenAI, incluyendo:
- Consultas previas de usuarios.
- Datos obtenidos mediante scraping periódico de medios, blogs y directorios.
- Feeds RSS y rastreos de páginas clave.
Estos datos se organizan en **estructuras tipo grafo de conocimiento**, donde cada negocio se conecta con menciones, reseñas, eventos, ubicaciones y categorías, similar al **Knowledge Graph de Google o a grafos semánticos**.
Este enfoque facilita combinar información dispersa y dar respuestas más contextuales.
### Rastreo de LLMs.txt y LLMs-full.txt
El panorama es **mixto**. Varios análisis señalan que **no hay soporte oficial amplio** por parte de los grandes (OpenAI/Anthropic/Google) a fecha reciente, y que *llms.txt* no bloquea ni autoriza por sí mismo.
**Observaciones en la práctica:** hay sitios que reportan **visitas de GPTBot** a *llms.txt* y aún más a *llms-full.txt*, e incluso métricas donde **ChatGPT sería una parte relevante** de ese tráfico; son datos empíricos de terceros, **no confirmación oficial**. ([Archer Education](https://www.archeredu.com/hemj/are-llms-txt-files-being-implemented-across-the-web/)).
En mi caso** ya estoy recibiendo solicitudes de rastreo** a mis webs y de mis clientes al archivo LLMs.txt y LLMs-full.txt. No solo a través de los bots de OpenAI directamente, si no como se menciona anteriormente de **uno de los mayores proveedores de datos del mundo** como es dataprovider.com.
Aquí una muestra:

Por lo que nos lleva a pensar que sí que será un estándar que adaptarán como** Google adaptó Schema.org** a sus Guidelines y algoritmos. pero la pregunta que deberíamos hacernos es: **¿y por que lo hacen?**, pues la respuesta más simple suele ser la más aceptada: **Por DINERO**, ¿Dinero?, si. imagina la reducción de **costes en presupuesto de rastreo** y renderizado si se empieza a integrar una archivo en** Markdown** que no deja de ser un texto plano, rápido, ligero, organizado y fácil de implementar. **Menos coste = Más Dinero**.
**Lo que sí es oficial para controlar OpenAI es:** que **sus bots (p. ej., GPTBot, OAI-SearchBot)** respetan (en principio) **robots.txt**; si quieres permitir o bloquear, **usa robots.txt** (y valida en logs).
### Técnicas de Combinación de Datos
- **Meta-búsqueda**: consulta simultánea a múltiples APIs y buscadores.
- **Fusión probabilística**: combina resultados de distintas fuentes ponderando su autoridad y coherencia.
- **Ranking híbrido**: mezcla relevancia semántica, popularidad, recencia y diversidad.
- **Enriquecimiento contextual**: añade datos extra como premios, noticias y reseñas recientes.
## Conclusiones finales del estudio
He comparado mi estudio original de GPT-4 con lo que ahora observo en GPT-5 y la conclusión es clara: **ya no basta con “estar” en un directorio**. GPT-5 mezcla fuentes (directorios, prensa, blogs, webs oficiales) y **aplica una capa editorial** (re-ranking)que prioriza recencia, autoridad y variedad.
La base de datos inicial sigue dependiendo de proveedores rápidos (ej. Foursquare), pero la **presentación final** está cada vez más curada y orientada a ayudar al usuario a decidir.
Para posicionar negocios locales en respuestas de IA, hoy manda **ser visible en proveedores veloces + tener señales recientes y fiables** en la web abierta.
### Qué significa en la práctica
- **GPT-5 re-rankea con más “contexto editorial”**: no solo devuelve sitios, sino que integra premios y cobertura mediática para **empujar *winners* claros arriba** (p. ej., O Cabo), y luego ofrece una capa de curación (“Destacados”, “Cómo elegir”). mejores tortillas A cor…
- **GPT-4 prioriza cobertura de directorios y cercanía funcional** para una intención concreta (vegetariano cerca de una calle), con menos narrativa editorial y más apoyo en listados/ratings.
### Consejos generales para mejorar el ranking (acción práctica)
- **Foursquare primero:** reclama y optimiza la ficha (categoría precisa, fotos propias, NAP impecable). Suelen “llegar” antes y rellenan el mapa rápido.
- **Google Business Profile a tope:** reseñas recientes (y respondidas), categorías, servicios, horarios y fotos/menú.
- **Consigue menciones en medios locales y blogs con autoridad:** notas de prensa cortas sobre premios, hitos o novedades. GPT-5 las usa como señales frescas.
- **Coherencia NAP en toda la red:** web, GBP, Foursquare, TripAdvisor, Yelp, etc. Evita duplicados mediante el mismo nombre/teléfono/dirección.
- **Schema “LocalBusiness” en tu web:** dirección, geo, horarios, menú/servicios; enlaza a tus perfiles (sameAs).
- **Páginas “colección” y FAQs claras:** listas curadas (“mejores X en Y”), preguntas frecuentes y comparativas… GPT-5 las entiende muy bien.
- **Rendimiento y accesibilidad:** CDN, tiempos de respuesta bajos y nada que bloquee a los bots que quieres permitir.
- **Cuida la frescura del contenido:** publica breves actualizaciones (novedades, platos, eventos, premios) y enlázalas internamente.
- **Monitoriza logs del servidor:** busca “GPTBot”, “OAI-SearchBot” y referencias a /robots.txt o /llms.txt para ver qué está entrando.
- **Cubre varias fuentes “de confianza”:** TripAdvisor/Yelp (si aplica), prensa local y páginas oficiales. Cuanta más **diversidad** de señales fiables, mejor.
> Disclaimer: Todo esto se basa en mis pruebas y análisis, no es la verdad absoluta ya que nadie la tiene, y si alguien se jacta de tenerla desconfía, «Cuando la limosna es grande hasta el santo desconfía». ## Preguntas Frecuentes
### ¿Cuál es la principal diferencia entre la forma en que GPT-4 y GPT‑5 (según el estudio) clasifican negocios locales?
El estudio indica que GPT-5 ya no se basa únicamente en la velocidad de llegada de los proveedores, sino que incorpora un ranking editorial híbrido que considera relevancia semántica, autoridad de la fuente, recencia de información, diversidad, popularidad, etc.
### ¿Qué fuentes utiliza GPT-5 para obtener datos de negocios locales?
Se infiere que usa un meta-buscador que consulta en paralelo múltiples fuentes: buscadores tradicionales, directorios (Foursquare, TripAdvisor, Yelp), medios y blogs, bases de datos públicas/privadas y datos internos de consulta histórica.
### ¿Cómo puedo prepararme para que mi negocio local tenga visibilidad en GPT-5?
Además de los factores tradicionales de SEO local, el artículo sugiere que debes asegurar: cobertura en directorios/reseñas actualizadas, menciones en medios/blogs, premios o noticias recientes, buen tratamiento semántico de la descripción del negocio, presencia en distintas plataformas.
### ¿Significa esto que la proximidad o la valoración ya no importan para GPT-5?
No exactamente. La proximidad sigue siendo relevante en búsquedas geo-localizadas, pero ya no es el factor dominante, y la valoración por sí sola tampoco garantiza posición: la autoridad de la fuente, el contexto, la diversidad de datos tienen cada vez más peso.
### ¿El estudio indica que GPT-5 utiliza algoritmos internos de OpenAI que no se conocen públicamente?
Sí. Se trata de una inferencia basada en análisis observacional, no de un documento oficial. Se especifica que “no es el código interno de OpenAI” sino lo que el comportamiento sugiere.
---
# Caso de Estudio 3: LLMs y JavaScript
Source: https://yaggoseo.com/caso-de-estudio-3-llms-y-javascript/
---
title: "Caso de Estudio 3: LLMs y JavaScript"
date: 2025-10-03T22:00:58+02:00
modified: 2026-08-03T22:18:26+02:00
author: "Yago Vázquez Gómez"
source: https://yaggoseo.com/caso-de-estudio-3-llms-y-javascript/
canonical: https://yaggoseo.com/caso-de-estudio-3-llms-y-javascript/
description: "Cómo ChatGPT procesa el código de una web (y por qué a veces parece que no lo hace) Cuando se habla de SEO técnico y datos estructurados, muchos se preguntan si ChatGPT y otros modelos de IA son capaces de..."
categories:
- "Casos de estudio"
---
# Caso de Estudio 3: LLMs y JavaScript
## Cómo ChatGPT procesa el código de una web (y por qué a veces parece que no lo hace)
Cuando se habla de **[SEO técnico y datos estructurados](https://yaggoseo.com/seo-tecnico/)**, muchos se preguntan si ChatGPT y otros modelos de IA son capaces de leer realmente el **schema JSON-LD** de una web.
La respuesta es clara: **sí, lo leen**. Pero el modo en que lo hacen puede generar confusión.
## El proceso de lectura de ChatGPT paso a paso
- **Petición al servidor**
ChatGPT no utiliza los bots oficiales (como **GPTBot, ChatGPT-User, OAI-SearchBot**), sino que suele apoyarse en servicios intermedios o scrapers que hacen la petición HTTP, (Web.run) no siempre ejecuta sus bots oficiales.
- Obviamente **esto no es «oficial»**, pero es muy sencillo de averiguar si generas consultas a una URL y luego compruebas los logs en el servidor.
- Este detalle es clave: **las CDNs o firewalls pueden servir una versión reducida del HTML** a esos agentes desconocidos.
- **Normalización del documento**
Se obtiene el HTML crudo, se descomprime y se analiza en un DOM.
- No se ejecuta JavaScript como un navegador real (no hay “renderizado completo”), salvo en configuraciones específicas con navegadores headless.
- **Extracción del ``**
Aquí busca `****`, meta tags, canonical, robots, Open Graph…
- Y, lo más importante, los bloques **``.
- El problema suele estar en el canal de scraping**: al no usar siempre bots oficiales, las CDNs pueden servir HTML reducido o incompleto.
- Rank Math y Yoast SEO permiten inyectar schema de forma robusta en el HTML inicial.
- Es recomendable revisar **no solo Cloudflare, sino también otras CDNs** para evitar bloqueos.
- Optimizar el JavaScript garantiza que tanto usuarios como modelos de IA **accedan a un contenido limpio, rápido y completo**.
- La clave es asegurar que el **schema esté en el HTML inicial (SSR)**, bien estructurado y sin bloqueos, para que ChatGPT, Perplexity y otros LLM lo procesen correctamente.
---
# Shopping para Ecommerce en ChatGPT
Source: https://yaggoseo.com/shopping-para-ecommerce-en-chatgpt/
---
title: "Shopping para Ecommerce en ChatGPT"
date: 2025-11-14T23:42:30+01:00
modified: 2026-08-03T22:18:25+02:00
author: "Yago Vázquez Gómez"
source: https://yaggoseo.com/shopping-para-ecommerce-en-chatgpt/
canonical: https://yaggoseo.com/shopping-para-ecommerce-en-chatgpt/
description: "Cómo adaptar tu catálogo de productos al Product Feed Spec de OpenAI Commerce ¿Quieres que tu tienda online esté lista para integrarse con las experiencias de OpenAI Commerce?En esta guía creada por mi Yago Vázquez (Consultor SEO) aprenderás a transformar..."
categories:
- "llms"
---
# Shopping para Ecommerce en ChatGPT
## Cómo adaptar tu catálogo de productos al Product Feed Spec de OpenAI Commerce
¿Quieres que tu tienda online esté lista para integrarse con las experiencias de **OpenAI Commerce**?En esta guía creada por mi Yago Vázquez (Consultor SEO) aprenderás a transformar tu catálogo en un feed compatible, siguiendo las mejores prácticas de SEO para LLMs.
👉 Para participar oficialmente y **habilitar tu tienda** en el ecosistema, primero debes inscribirte en el portal de comerciantes de** OpenAI**. Solo necesitas crear tu cuenta en [https://chatgpt.com/es-ES/merchants/](https://chatgpt.com/es-ES/merchants/), donde podrás registrar tu negocio, aceptar las condiciones de uso y empezar a** configurar tu catálogo de productos** para que se muestre dentro de las experiencias de ChatGPT y otros servicios.
## 1. Auditoría inicial de tu catálogo
Antes de exportar cualquier información, realiza una revisión exhaustiva de tu catálogo o ERP para conocer qué campos tienes disponibles y cuáles te faltan. Esto te permitirá anticiparte a errores comunes en la integración.
- ID único o SKU
- Nombre del producto
- Descripción (sin HTML)
- URL del producto (PDP)
- Precio y divisa
- Stock disponible
- Marca y categoría
- Imágenes
- Variantes (color, talla, etc.)
- Políticas de devolución (si usarás checkout)
👉 Haz especial hincapié en este paso: una auditoría bien hecha evita pérdidas de tiempo en fases posteriores.
## 2. Mapeo de campos (source → spec)
Para que tu feed funcione correctamente con el estándar de OpenAI, debes mapear tus campos internos al formato requerido. A continuación te muestro los campos obligatorios y los recomendados.
**Campos obligatorios:**
- `id` → SKU o product_id
- `title` → Nombre del producto
- `description` → Descripción sin HTML
- `link` → URL canónica
- `image_link` → Imagen principal
- `price` → Precio + divisa (ej. 79.99 USD)
- `availability` → in_stock / out_of_stock / preorder
- `inventory_quantity` → Cantidad en stock
- `enable_search`, `enable_checkout`
**Campos recomendados:**
- `brand`, `product_category`, `weight`
👉 Si activas checkout, añade también: `seller_name`, `seller_url`, `return_policy`, `return_window`.
---
## 3. Ejemplo de feed en CSV
`enable_search,enable_checkout,id,title,description,link,image_link,price,availability,inventory_quantity,brand,product_category,weight,seller_name,seller_url,return_policy,return_window
true,false,SKU12345,"Men's Trail Running Shoes Black","Waterproof trail shoe with cushioned sole","https://example.com/product/SKU12345","https://example.com/images/skሴ5.jpg","79.99 USD",in_stock,25,OpenAI,"Apparel & Accessories > Shoes","1.5 lb","Example Store","https://example.com/store","https://example.com/returns",30`
## 4. Ejemplo de feed en JSON
`{
"enable_search": "true",
"enable_checkout": "false",
"id": "SKU12345",
"title": "Men's Trail Running Shoes Black",
"description": "Waterproof trail shoe with cushioned sole",
"link": "https://example.com/product/SKU12345",
"image_link": "https://example.com/images/skሴ5.jpg",
"price": "79.99 USD",
"availability": "in_stock",
"inventory_quantity": 25,
"brand": "OpenAI",
"product_category": "Apparel & Accessories > Shoes",
"weight": "1.5 lb"
}`
## 5. Reglas de validación esenciales
- `sale_price` debe ser menor o igual que `price` y requiere `sale_price_effective_date`.
- Si `availability = preorder`, debe definirse `availability_date` en el futuro.
- Las variantes deben compartir `item_group_id`.
- Todas las URLs deben devolver un código HTTP 200.
- El feed puede actualizarse cada **15 minutos** para mantener la frescura del catálogo.
Siguiendo estas reglas aseguras que el sistema rechace lo mínimo posible y tu feed pase las validaciones de OpenAI.
## 6. Script de transformación en Python
Ejemplo para transformar un CSV en un feed válido (CSV + JSONL):
`import csv, json, html, re
with open("catalogo.csv", newline="", encoding="utf-8") as f:
reader = csv.DictReader(f)
feed = []
for row in reader:
item = {
"enable_search": "true",
"enable_checkout": "false",
"id": row["sku"],
"title": row["title"],
"description": html.unescape(re.sub("]*>", "", row["description"])),
"link": row["url"],
"image_link": row["image"],
"price": f"{row['price']} USD",
"availability": "in_stock" if int(row["stock"]) > 0 else "out_of_stock",
"inventory_quantity": int(row["stock"]),
"brand": row.get("brand", ""),
"product_category": row.get("category", ""),
"weight": row.get("weight", "0.5 kg")
}
feed.append(item)
with open("openai_feed.jsonl", "w", encoding="utf-8") as out:
for item in feed:
out.write(json.dumps(item) + "\n")
`
## 7. Exportar el feed desde PrestaShop
En **PrestaShop**, los datos del catálogo se encuentran distribuidos en varias tablas (productos, descripciones, stock, imágenes, marcas). Para generar el feed compatible con OpenAI Commerce puedes usar una consulta SQL base y luego transformarla.
### Mapeo de campos clave
- `id` → ps_product.id_product
- `title` → ps_product_lang.name
- `description` → ps_product_lang.description
- `link` → ps_product_lang.link_rewrite
- `image_link` → ps_image.id_image (combinado con URL base)
- `availability` → ps_stock_available.quantity
- `brand` → ps_manufacturer.name
### Ejemplo en SQL
`sql
SELECT p.id_product AS id,
pl.name AS title,
pl.description AS description,
CONCAT('https://tu-dominio.com/', pl.link_rewrite, '.html') AS link,
CONCAT('https://tu-dominio.com/img/p/', i.id_image, '-large_default.jpg') AS image_link,
FORMAT(p.price, 2) AS price_raw,
IF(s.quantity > 0, 'in_stock', 'out_of_stock') AS availability,
s.quantity AS inventory_quantity,
m.name AS brand
FROM ps_product p
JOIN ps_product_lang pl ON p.id_product=pl.id_product AND pl.id_lang=1
LEFT JOIN ps_stock_available s ON s.id_product=p.id_product
LEFT JOIN ps_manufacturer m ON m.id_manufacturer=p.id_manufacturer
LEFT JOIN ps_image i ON i.id_product=p.id_product AND i.cover=1
WHERE p.active=1;`
## 8. Exportar el feed desde Magento 2
En **Magento 2 (Adobe Commerce)**, lo más recomendable es usar el stack nativo de Magento en lugar de SQL crudo, ya que trabaja con un modelo EAV.
### Mapeo de campos clave
- `id` → SKU
- `title` → name
- `description` → description
- `link` → getProductUrl()
- `image_link` → media/catalog/product + image
- `availability` → stock (MSI)
- `brand` → atributo personalizado
- `product_category` → nombres de categorías
### Ejemplo en PHP
`use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';
$params = $_SERVER;
$bootstrap = Bootstrap::create(BP, $params);
$obj = $bootstrap->getObjectManager();
$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');
$productCollection = $obj->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory')->create();
$productCollection->addAttributeToSelect(['sku','name','description','price','brand','weight','image']);
$fp = fopen(__DIR__.'/openai_feed.csv','w');
fputcsv($fp,['enable_search','enable_checkout','id','title','description','link','image_link','price','availability','inventory_quantity','brand','product_category','weight']);
foreach($productCollection as $p){
$sku = $p->getSku();
$name = $p->getName();
$desc = strip_tags($p->getDescription());
$url = $p->getProductUrl();
$img = $baseUrl.'media/catalog/product'.$p->getImage();
$price = number_format((float)$p->getPrice(),2,'.','').' EUR';
...
}
`
## 9. Validación final del feed
Independientemente del CMS que uses, antes de entregar el feed conviene validarlo con un script en Python:
`import csv, sys
req = {'id','title','description','link','image_link','price','availability','inventory_quantity'}
with open('openai_feed.csv', newline='', encoding='utf-8') as f:
r = csv.DictReader(f)
for i,row in enumerate(r, start=2):
missing = [k for k in req if not row.get(k)]
if missing:
print(f'Fila {i}: faltan campos {missing}')
sys.exit(1)
print('Feed OK')
`
## 10. Buenas prácticas para tu feed
- Usa **IDs estables** (evita cambiar SKUs una vez lanzado).
- Limpia las descripciones de HTML y elimina tags innecesarios.
- Incluye **divisa** en el precio y **unidades** en medidas.
- Automatiza la generación/refresco del feed cada ~15 min para máxima frescura.
- Prueba primero con un **feed de muestra** reducido antes de exportar el catálogo completo.
Estas buenas prácticas mejoran la calidad, fiabilidad y velocidad de integración.
## Conclusiones finales
Adaptar tu catálogo al **Product Feed Spec de OpenAI Commerce** no es complicado si sigues un flujo claro:
**Auditar → Mapear → Normalizar → Validar → Exportar → Refrescar.**
Siguiendo estos pasos, tu tienda estará lista para integrarse en el ecosistema de IA de OpenAI y tus productos podrán aparecer correctamente en experiencias de ChatGPT y otros servicios.
## Da el siguiente paso con OpenAI Commerce
¿Estás listo para que tus productos se muestren en las experiencias de ChatGPT y otros servicios de OpenAI? El primer paso es **inscribirte como comerciante** y registrar tu tienda en el portal oficial de comerciantes.
No pierdas la oportunidad de adelantarte: configura hoy tu catálogo y empieza a vender directamente en el ecosistema de IA.
[👉 Haz clic aquí para unirte ahora](https://chatgpt.com/es-ES/merchants/)
No pierdas la oportunidad de adelantarte: configura tu catálogo hoy y empieza a vender directamente en el ecosistema de IA.
---
# Caso Estudio 1: cómo Chat GPT clasifica negocios locales
Source: https://yaggoseo.com/como-chat-gpt-clasifica-negocios-locales/
---
title: "Caso Estudio 1: cómo Chat GPT clasifica negocios locales"
date: 2025-05-05T19:21:26+02:00
modified: 2026-08-03T22:18:22+02:00
author: "Yago Vázquez Gómez"
source: https://yaggoseo.com/como-chat-gpt-clasifica-negocios-locales/
canonical: https://yaggoseo.com/como-chat-gpt-clasifica-negocios-locales/
description: "Estudio detallado: cómo ChatGPT genera y ordena listados de negocios locales Autores: equipo de análisis (YaggoSEO y sus Neuro divergencias) (abril 2025) Fuentes de datos: trazas JSON exportadas desde la interfaz ChatGPT para tres búsquedas reales: BUSQUEDA RESTAURANTES VEGETARIANOS CORUÑA. mejores electricistas lugo. mejores vegetarianos cerca de la calle Real A Coruña. 1. Introducción..."
categories:
- "Casos de estudio"
---
# Caso Estudio 1: cómo Chat GPT clasifica negocios locales
## Estudio detallado: cómo ChatGPT genera y ordena listados de negocios locales
> **Autores**: equipo de análisis (YaggoSEO y sus Neuro divergencias) (abril 2025) **Fuentes de datos**: trazas JSON exportadas desde la interfaz ChatGPT para tres búsquedas reales: - *[BUSQUEDA RESTAURANTES VEGETARIANOS CORUÑA](https://yaggoseo.com/wp-content/uploads/RESTAURANTES-VEGETARIANOS-CORUNA.docx)*. - *[mejores electricistas lugo.](https://yaggoseo.com/wp-content/uploads/mejores-electricistas-lugo.docx)* - [*mejores vegetarianos cerca de la calle Real A Coruña*.](https://yaggoseo.com/wp-content/uploads/vegetarianos-cerca-de-la-calle-Real-A-Coruna.docx)
## 1. Introducción y objetivo
Los usuarios de ChatGPT suelen confiar en sus recomendaciones para decidir dónde comer o a qué profesional contratar. Pero **¿cómo decide el modelo qué negocios mostrar primero?**
En este documento desglosamos **paso por paso** el flujo interno, apoyándonos en tres ejemplos verificados, para descubrir el patrón real y proponer **estrategias de *SEO Local*** adaptadas a esta nueva ventana de visibilidad.
Del mismo modo, [Natzir Turrado](https://natzir.com/posicionamiento-buscadores/seo-local-para-chatgpt/) ha compartido también su visión y enfoque único sobre este tema en su perfil, y os dejo aquí el enlace por si queréis ampliarlo con más detalle.
## 2. Metodología
- Se ejecutó cada consulta en ChatGPT «o3».
- Se exportó el árbol JSON completo.
- Se aislaron los nodos relevantes (`search_result_group`, `safe_urls`, `businesses_map`).
- Se midieron tiempos de llegada (~ marcas `timestamp_ms`).
- Se contrastó la distancia en las búsquedas georreferenciadas mediante fórmula de Haversine.
## 3. Pipeline interno (común a las tres búsquedas)
`┌────────────────────────────┐
│ 1 · web.search("consulta") │ ← una sola llamada a Bing
└────────────┬───────────────┘
│
▼
┌────────────────────────────┐
│ 2 · Filtrado `safe_urls` │ ← whitelist (Foursquare, Google Maps, TripAdvisor, dominios
| propios)
└────────────┬───────────────┘
│ (cada URL ↘)
▼
┌────────────────────────────┐
│ 3 · Peticiones paralelas │
│ a proveedores │
│ • provider:"foursquare" │
│ • provider:"serp" (Google│
│ Maps via SERP scraping)│
└────────────┬───────────────┘
│ (respuesta cuando llegue)
▼
┌────────────────────────────┐
│ 4 · Relleno `businesses_map│
│ en orden de llegada │
└────────────┬───────────────┘
│
▼
┌────────────────────────────┐
│ 5 · UI: se muestra tal cual│ ← **sin sort() final**
└────────────────────────────┘`
### 3.1 Ejecución del web.search()
`{
"type": "search_result_group",
"domain": "paxinasgalegas.es",
"entries": [ ... ]
}`
*Ejemplo A Coruña* – los dominios aparecen en idéntico orden al de la SERP de Bing [BUSQUEDA RESTAURANTES VEGETARIANOS CORUÑA.txt].
### 3.2 Filtrado safe_urls
`"safe_urls": [
"https://foursquare.com/v/67fab8d79025d3472660f858",
"https://images.openai.com/thumbnail-content/...",
"http://www.utopiarestaurante.com",
...
]`
Solo enlaces cuyo dominio está en la lista blanca o cuya ruta coincide con un patrón conocido se trasladan a este array.
### 3.3 Llamadas paralelas a proveedores
Cada URL se despacha en *background*:
- **Foursquare** → petición directa `GET venues/{id}`.
- **serp** → scraper extrae datos estructurados del panel de Google Maps embebido.
| Proveedor | Latencia media | Campos clave | Ejemplo ID |
| --------- | -------------- | ------------ | ----------- |
| foursquare | ~200 ms | rating, review_count, hours | "id":"67fab8d..." |
| serp (Maps) | 700–900 ms | rating, review_count, price_str + image_url | "id":"Poke by Art" |
### 3.4 Relleno de businesses_map[]
`{
"id": "La Cuchara Veggie",
"provider": "foursquare",
"rating": null,
"latitude": 43.371858,
...
},
{
"id": "A Pastar Vegano",
"provider": "serp",
"rating": 4.6,
...
}`
Se insertan **en la secuencia exacta de llegada**; no existe un campo `**score**` global.
### *No existe un sort() final
El sistema **no calcula un score** nuevo: el orden visible es exactamente la secuencia de llegada de las fichas. Por eso:
- Mahara (4,8 ★) aparece detrás de varios locales sin rating: su ficha Google tardó más en resolverse.
- Nicman Instalacións (5 ★, Lugo) queda a media lista porque su panel de Maps llegó después de varias respuestas Foursquare sin valoraciones.
### 3.5 Deduplicación
Si nombre + dirección ≈ coinciden → se **fusionan campos**; si difieren, duplicado visible.
Si dos respuestas comparten nombre y dirección casi idénticos se combinan; si no, aparecen duplicadas. De ahí que *Electricidad Vázquez Vila* salga dos veces cuando Foursquare y Google la nombran con variantes distintas. **(NAP inconsistente)**
## 4. Caso I: «Restaurantes vegetarianos en A Coruña»
- `**safe_urls**` iniciales: 13 enlaces de Foursquare y webs propias .
- Primer negocio en `businesses_map`: *La Cuchara Veggie* (Foursquare) .
- Siguientes posiciones: se intercalan *A Pastar*, *SenPan*, *Utopía* según van llegando otras llamadas Foursquare y las más lentas del scraper de Google.
| Orden final | Proveedor | Rating | Tiempo llegada | Distancia al centro* |
| ----------- | --------- | ------ | -------------- | -------------------- |
| 1. La Cuchara Veggie | FSQ | — | 0.21 s | 0.2 km |
| 2. A Pastar Vegano | SERP | 4.6 | 0.98 s | 1.8 km |
*Centro = Plaza de María Pita.
Nota: *Mahara* (4.8★, 537 reviews) llegó en 1.63 s y quedó 7.ª.
## 5. Caso II: «Mejores electricistas en Lugo»
- `safe_urls`: dominio Habitissimo + nueve Foursquare + webs oficiales .
- Primera ficha: *Leivas y Rodil* (Foursquare rápido) .
- Más tarde se añade *Nicman Instalacións* (provider `serp`) y desciende a la 8.ª posición pese a tener la nota más alta.
La primera ficha *Leivas y Rodil* proviene de Foursquare en 0.19 s. *Nicman Instalacións* (5★) tardó 1.1 s porque dependía del scraper de Google y se colocó 8.º.
Fragmento de `businesses_map`:
`{
"id": "Leivas y Rodil",
"provider": "foursquare",
"rating": null,
"timestamp_ms": 190,
...
},
{
"id": "Nicman Instalacións",
"provider": "serp",
"rating": 5.0,
"timestamp_ms": 1104,
...
}`
## 6. Caso III: «Vegetarianos cerca de la Calle Real, A Coruña»
Aquí el **pipeline no cambia**, pero la **distancia** entra porque los proveedores reciben la coordenada de la Calle Real y reordenan *internamente*:
- Foursquare devuelve primero los locales a ≤ 100 m: *El Valentín* y *La Cuchara Veggie* .
- En cuanto concluye Foursquare, se van añadiendo las fichas Google por orden de scraping, de modo que *SenPan* (≈ 1,1 km) se cuela antes que *Divya’s Kitchen* (≈ 600 m) porque su llamada acabó antes .
El orden global **sigue siendo “primer llegado, primer mostrado”**; simplemente las respuestas de Foursquare ya vienen ordenadas por proximidad.
La propia consulta lleva un sesgo geográfico. Foursquare recibe `ll=43.371707,-8.398502` (lat/lng Calle Real) y **reordena internamente**.
| Negocio | Distancia real al punto (m) | Latencia |
| ------- | --------------------------- | -------- |
| Valentín | 35 m | 0.22 s |
| La Cuchara Veggie | 95 m | 0.24 s |
| Giova Pizza Al Corte | 210 m | 0.28 s |
El array global sigue el orden de llegada; simplemente las respuestas de **Foursquare** ya vienen pre‑ordenadas por proximidad.
---
## 7. Comparación de los tres casos
| Paso | Comportamiento común | Variación notable |
| ---- | --------------------- | ------------------ |
| web.search() | Siempre 1 llamada | Siempre 1 llamada |
| safe_urls | Whitelist idéntica | Nº inicial de URLs varía según nicho |
| Latencia FSQ vs SERP | FSQ ≈ 4× más rápido | Igual en todas |
| Criterio ranking proveedor | Popularidad | Cuando hay punto de referencia → distancia |
| Re‐orden final | **Nunca** | **Nunca** |
---
## 8. Factores que sí influyen
- **Velocidad** del proveedor (Foursquare casi siempre gana).
- **Orden interno** del proveedor (popularidad o distancia).
- **Whitelist** (safe_urls): si tu dominio no está, tu web no se considerará.
## 9. Factores que no influyen (en 2025‑04)
- Valoración media y nº de reseñas comparados entre proveedores.
- Precio (`**price_str**`).
- Promociones o anuncios pagados.
---
## 10. Recomendaciones de Local SEO específicas
| Acción | Por qué funciona |
| ------- | ----------------- |
| Reclama y optimiza tu ficha **Foursquare** | Es la primera fuente en ser procesada y ordena por popularidad/distancia |
| Mantén al día **Google Business Profile** | Si tu panel aparece en la primera página, el scraper se lanza pronto |
| Consigue menciones en dominios de la whitelist (Páxinas Galegas, Habitissimo…) | Sus enlaces se copian a **safe_urls** sin fricción |
| Consistencia **NAP** (name‑address‑phone) | Evita duplicados que puedan dispersar tu presencia |
| Dirección precisa y categorías correctas | Mejora el ranking interno por distancia y relevancia |
## 11. Limitaciones de este estudio
- Muestra de tres consultas; otros sectores o idiomas podrían incluir proveedores extra.
- Cambios futuros en la whitelist o en latencias podrían alterar conclusiones.
- No se analizó la fase de *moderación*, que podría filtrar términos sensibles.
## 12. Conclusiones estilo Chat Gpt
ChatGPT **no realiza su propio ranking** de negocios locales: refleja el orden temporal en que llegan las fichas de proveedores externos.
Por tanto, para “aparecer arriba”, la estrategia pasa por **ser indexado por la fuente más rápida (Foursquare) y figurar alto en su ranking interno**. La distancia se vuelve relevante sólo cuando la query la requiere, porque se incorpora en el orden que Foursquare o Google utilizan **antes** de que ChatGPT siquiera reciba los datos.
> *“Quien responda antes, manda”* — ésa es, hoy por hoy, la regla de oro para ganar visibilidad local dentro de ChatGPT. Disclaimer: Todo esto se basa en mis pruebas y análisis, no es la verdad absoluta ya que nadie la tiene, y si alguien se jacta de tenerla desconfía, «Cuando la limosna es grande hasta el santo desconfía».
## Preguntas frecuentes
### ¿Cómo es que ChatGPT / un LLM puede “clasificar” negocios locales?
Según el estudio, ChatGPT no aplica internamente un ranking propio sino que toma los listados en el orden en que los proveedores externos le llegan (por ejemplo fichas de Foursquare, scraping de Google Maps) y los muestra tal cual.
### ¿Qué factores afectan el orden de los negocios mostrados por ChatGPT en búsquedas locales?
Según el análisis, los factores que sí influyen (en ese momento) fueron: la velocidad de respuesta del proveedor (cuánto tarda la ficha en llegar) y la proximidad geográfica cuando aplica.
### ¿Qué factores no afectan actualmente el ranking de negocios locales en ChatGPT?
En el estudio se observó que la valoración media (estrellas), número de reseñas y el precio no tenían correlación directa con la posición del negocio.
### ¿Cómo puedo optimizar un negocio local para que aparezca mejor en respuestas de IA como ChatGPT?
Algunas recomendaciones del artículo: reclamar y optimizar la ficha de Foursquare, mantener actualizada la ficha de Google Business Profile, obtener menciones en dominios de la whitelist (directorios reconocidos), asegurar consistencia NAP (nombre-dirección-teléfono) y categoría precisa.
### ¿Considera este estudio todas las variantes de nicho, idioma o país?
No. El artículo indica que la muestra se basa en búsquedas concretas (en España, negocios locales) y que otros sectores, idiomas o contextos podrían arrojar distintos resultados.
---