Selección de fuentes de ChatGPT: acceso al JSON, estructura de datos y extracción con Python
Guía técnica para programadores junior sobre cómo interceptar el JSON que devuelve ChatGPT con browsing activado, entender su estructura de campos (search_results, sources_footnotes, safe_urls, blocked_urls) y automatizar el análisis con Python.
Por qué analizar cómo ChatGPT selecciona sus fuentes: lo que el JSON revela
Cuando ChatGPT responde con browsing activado, realiza búsquedas externas y selecciona fuentes según criterios de autoridad y relevancia. Ese proceso genera un JSON accesible desde las herramientas de desarrollo del navegador que documenta exactamente qué URLs fueron recuperadas, cuáles se citaron, cuáles se descartaron y cuáles fueron bloqueadas.
Entender esta estructura es útil para dos cosas: optimizar contenido propio para que ChatGPT lo seleccione (perspectiva SEO), y construir pipelines de extracción de datos que filtren fuentes con los mismos criterios que usa la IA (perspectiva de desarrollo).
search_results, sources_footnotes, supporting_websites, safe_urls, blocked_urls
json
Acceso al JSON desde la consola: ocho pasos desde el navegador
No hace falta instalar nada. Las herramientas de desarrollo del navegador permiten interceptar la petición que devuelve el JSON de fuentes directamente.
- Paso 1 — Abrir ChatGPT con browsing activado
- Acceder a ChatGPT en el navegador y verificar que el modo de navegación web esté habilitado. Sin browsing, ChatGPT no realiza búsquedas externas y no se genera el JSON de fuentes.
- Paso 2 — Abrir herramientas de desarrollo
- Pulsar F12 o clic derecho en la página → Inspeccionar. Navegar a la pestaña Network (Red). Mantenerla abierta antes de hacer la consulta para capturar todas las peticiones.
- Paso 3 — Filtrar por XHR o fetch
- En la barra de filtros de la pestaña Network, seleccionar XHR o Fetch para mostrar solo las peticiones de datos. Esto elimina el ruido de imágenes, CSS y scripts y deja visibles las llamadas a APIs.
- Paso 4 — Hacer una consulta que active el browsing
- Escribir una pregunta en ChatGPT que requiera información externa reciente (noticias, datos actuales, precios). ChatGPT activará el browsing y se generarán peticiones de red visibles en el panel.
- Paso 5 a 8 — Localizar y copiar el JSON
- Buscar la petición cuyo nombre esté relacionado con la consulta o contenga "search". Hacer clic en ella, ir a la pestaña Response y copiar el contenido JSON completo. Pegar en un archivo
.jsonpara analizarlo con Python u otras herramientas.
Los cinco campos del JSON: qué contiene cada uno y para qué sirve
Array con todas las URLs obtenidas en la búsqueda externa. Incluye url, title y snippet para cada resultado. Es el universo total de fuentes antes de cualquier filtrado.
Array con las URLs que ChatGPT consideró suficientemente relevantes y fiables para citar explícitamente en su respuesta. Es el subconjunto más valioso para análisis de autoridad.
URLs usadas para contextualizar la respuesta pero no citadas como fuentes principales. Útil para entender qué contenidos influyen en la respuesta sin aparecer explícitamente.
URLs que superaron los filtros de seguridad del sistema. La mayoría de search_results debería estar aquí. Las URLs ausentes de este campo pero presentes en los resultados pueden haber sido descartadas por razones de contenido.
URLs que el sistema bloqueó por razones de seguridad o que resultaron inaccesibles durante la búsqueda. Analizar este campo ayuda a identificar patrones de bloqueo y qué tipos de dominios evita ChatGPT.
{
"search_results": [
{"url": "https://ejemplo.com/articulo1", "title": "Artículo 1", "snippet": "Resumen..."},
{"url": "https://ejemplo.com/articulo2", "title": "Artículo 2", "snippet": "Resumen..."}
],
"sources_footnotes": [
"https://ejemplo.com/articulo1"
],
"supporting_websites": [
"https://soporte.com"
],
"safe_urls": [
"https://ejemplo.com/articulo1", "https://soporte.com"
],
"blocked_urls": [
"https://bloqueado.com"
]
}
Script para cargar y analizar el JSON extraído: listo para copiar
Una vez copiado el JSON en un archivo local, este script carga los datos y muestra las fuentes citadas, las URLs seguras y las bloqueadas.
import json
# Cargar el archivo JSON copiado desde DevTools
with open('resultados_chatgpt.json', 'r', encoding='utf-8') as f:
data = json.load(f)
# Fuentes citadas en la respuesta
print("Fuentes citadas (sources_footnotes):")
for url in data.get('sources_footnotes', []):
print(f" {url}")
# URLs que superaron los filtros de seguridad
print("\nURLs seguras (safe_urls):")
for url in data.get('safe_urls', []):
print(f" {url}")
# URLs bloqueadas o inaccesibles
print("\nURLs bloqueadas (blocked_urls):")
for url in data.get('blocked_urls', []):
print(f" {url}")
# Resumen del universo total de resultados
total = len(data.get('search_results', []))
citadas = len(data.get('sources_footnotes', []))
bloqueadas = len(data.get('blocked_urls', []))
print(f"\nResumen: {total} resultados, {citadas} citados, {bloqueadas} bloqueados")
Dos criterios principales: autoridad y relevancia
Entender los criterios de selección permite optimizar contenido propio para que aparezca en sources_footnotes — no en blocked_urls ni ignorado en search_results.
Señales que ChatGPT asocia con autoridad: menciones en medios de referencia, backlinks de calidad, participación en comunidades expertas y consistencia de marca a lo largo del tiempo. No se trata de métricas de dominio — se trata de si el sitio es reconocido como referente en su área.
El contenido debe responder directamente a la intención de búsqueda, con profundidad suficiente y actualización reciente. ChatGPT tiende a realizar búsquedas con long-tail queries específicas — el contenido genérico raramente aparece en sources_footnotes.
Las alianzas editoriales no generan priorización directa en la selección de fuentes — ChatGPT no filtra por acuerdos comerciales. Su efecto es indirecto: mejoran la reputación y visibilidad de los medios participantes, lo que sí influye en los criterios de autoridad.
Seis recomendaciones para extracción y análisis de fuentes de IA
- Monitoriza las URLs que aparecen en resultados de ChatGPT
- Herramientas como Peec AI están especializadas en rastrear la presencia de dominios en las respuestas de modelos de lenguaje. Combinadas con el análisis manual del JSON, permiten hacer seguimiento sistemático de la visibilidad en IA.
- Optimiza para long-tail queries específicas
- ChatGPT realiza búsquedas orientadas a la intención del usuario, no búsquedas genéricas. El contenido que responde con precisión a preguntas concretas tiene más probabilidad de aparecer en
sources_footnotesque el contenido de cobertura amplia sin profundidad. - Automatiza el filtrado por relevancia, autoridad y actualización
- En pipelines de extracción de datos, aplicar los mismos criterios que usa ChatGPT: descartar fuentes sin fecha de actualización reciente, priorizar dominios con presencia editorial verificable y eliminar URLs que aparecen consistentemente en
blocked_urls. - Solicita fuentes explícitas en tus prompts
- Pedir a la IA que incluya las URLs de sus fuentes en la respuesta facilita la verificación sin necesidad de acceder al JSON directamente. Útil para flujos de trabajo donde no se tiene acceso a las herramientas de desarrollo.
- Valida cruzando varias fuentes antes de usar los datos
- Un campo
sources_footnotesno es una garantía de exactitud — es una señal de que ChatGPT consideró esa fuente relevante. Siempre verificar la información en la fuente original antes de incorporarla a un análisis o decisión. - Limpia y deduplica antes del análisis final
- El JSON puede contener duplicados entre
search_resultsysafe_urls, o URLs con parámetros de tracking que apuntan al mismo contenido. Normalizar las URLs y eliminar duplicados antes del análisis evita sesgos en los resultados.
Yel Martínez, Digital Strategist & Technologist — especialista en SEO técnico, extracción y análisis de datos y estrategia de visibilidad en IA. Para proyectos de análisis de presencia en IA, SEO técnico o desarrollo Python: contacto.
