Landing Page Auditor

Audita una página de aterrizaje, inicio o ventas para conversión utilizando GA4, Search Console, Google Ads y renders de escritorio y móvil, puntuando siete pilares y clasificando correcciones con reescrituras. Úsalo cuando una página no está convirtiendo, o para una revisión de página de aterrizaje, verificación móvil o estructura de página nueva.

¿Qué es Landing Page Auditor?

Esta habilidad realiza una auditoría exhaustiva de una página de aterrizaje, página de inicio o página de ventas, evaluando su rendimiento de conversión a través de siete pilares. Utiliza datos de Google Analytics 4, Google Search Console, Google Ads y DataForSEO, combinados con capturas de pantalla de escritorio y móvil y métricas de velocidad de página. La auditoría identifica problemas de seguimiento, mide la tasa de conversión, analiza fuentes de tráfico y dispositivos, evalúa la intención orgánica y de pago, descompone la estructura de la página (hero, CTAs, pruebas sociales, formularios) y verifica la velocidad y accesibilidad. Cada hallazgo está respaldado por datos concretos o elementos de la página, y la herramienta genera una puntuación para cada pilar junto con correcciones priorizadas y reescrituras de texto. Es compatible con InsightfulPipe MCP y requiere acceso a GA4, DataForSEO y opcionalmente Google Ads y Search Console.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Insightful-Pipe/analytics-cro-skills/tree/HEAD/skills/landing-page-auditor

Installed? Explore more Investigación y análisis de datos skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Auditor de Página de Aterrizaje

Una auditoría que analiza la página y a las personas que llegan a ella. Cada hallazgo proviene de una llamada que ejecuta esta habilidad, y cada hallazgo muestra los números o el elemento de la página que lo respalda.

Antes de empezar

Necesitas tener conectado el MCP de InsightfulPipe. Google Analytics 4 y DataForSEO marcan el camino principal; las otras fuentes lo complementan.

  1. Llama a query_contexts con request="accounts" para cada plataforma: google-analytics, google-search-console, dataforseo, screenshot, pagespeed-insights y google-ads si la página recibe tráfico de pago. Anota workspace_id, brand_id, el property_id de GA4 y el site_url de Search Console. Si hay varias propiedades, pregunta qué sitio.
  2. Llama a query_contexts con request="actions_details" para get_report y list_key_events (google-analytics), search_analytics, onpage_instant_pages, capture, core-web-vitals, accessibility-seo y gaql, y sigue las estructuras de cuerpo que devuelve.
  3. Pide tres cosas, y usa los valores predeterminados si el usuario no sabe:
    • La página. Por defecto: la página de aterrizaje con más sesiones en GA4 (paso 1).
    • La única acción para la que existe la página (registrarse, comprar, reservar una demo, llamar, descargar). Por defecto: el destino del primer CTA en el hero.
    • El tipo de página: página de aterrizaje de pago, página de inicio, página de ventas, precios, funcionalidad, producto, generación de leads, evento. Por defecto: inferirlo de la URL y la mezcla de tráfico, y decirlo.

Fechas. GA4 necesita uno o dos días para procesar un día, y un día que aún no se ha procesado muestra sesiones sin participación. Usa los últimos 28 días que terminan 2 días antes de hoy. Search Console se retrasa más: finaliza su ventana 3 días antes de hoy. Indica ambas ventanas al principio del informe.

Cómo ejecutar las consultas

Cada cuerpo siguiente pasa por query_data con la plataforma que nombra, más workspace_id y brand_id. Las fechas provienen de una ejecución de prueba: usa tus propias ventanas. La ruta / y https://example.com/ representan la página que auditas. Reglas que las APIs aplican o los datos requieren:

  • landingPage de GA4 es una ruta sin el host (/pricing). Las filas con un valor vacío o (not set) son sesiones sin una vista de página; exclúyelas de las clasificaciones de página y di cuántas había.
  • Los filtros de GA4 usan dimensionFilter con filter / stringFilter (matchType EXACT), inListFilter, o un andGroup de expresiones.
  • Search Console filtra por la URL completa, incluyendo el host y la barra inclinada final que usa el sitio.
  • GAQL de Google Ads: cualquier cosa en ORDER BY también debe estar en SELECT. El dinero está en _micros; divídelo por 1,000,000.
  • custom_js de DataForSEO se ejecuta en un modelo de página sin motor de diseño: getBoundingClientRect, innerHeight y los estilos calculados no están presentes, y NodeList.forEach falla. Usa bucles for simples y orden del DOM, mantén el script por debajo de unos 2,000 caracteres, y lee custom_js_client_exception cuando la respuesta esté vacía. Cada llamada onpage_instant_pages se factura: una por página.

Si una llamada falla, continúa. Marca lo que alimenta como desconocido, di qué llamada falló y por qué, y vuelve a intentar una herramienta de página fallida una vez al final. Nunca llenes un vacío con una suposición.

Paso 1. Selecciona la página y verifica el seguimiento

{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["date"], "metrics": ["sessions", "engagedSessions", "keyEvents"],
 "start_date": "2026-09-06", "end_date": "2026-10-05"}

Ejecuta esta verificación diaria durante los últimos 30 días hasta ayer.

  • Cambio de seguimiento: si las sesiones de un día son al menos 5 veces la mediana de los 7 días anteriores, y los días siguientes se mantienen en ese nivel, la etiqueta cambió ese día (o al revés para una caída). Comienza la ventana en el primer día del nuevo nivel.
  • Días no procesados: un día reciente con sesiones y 0 sesiones comprometidas aún no se ha procesado. Mantenlo fuera de la ventana.
  • Ventana corta: si quedan menos de 7 días, la auditoría aún se ejecuta, pero di al principio del informe que las tasas son direccionales.
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["landingPage"],
 "metrics": ["sessions", "engagedSessions", "engagementRate", "keyEvents", "averageSessionDuration"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "orderBys": [{"metric": {"metricName": "sessions"}, "desc": true}], "limit": 25}

Ejecuta el mismo informe con deviceCategory como única dimensión para la tasa de participación general del sitio. Si el usuario no nombró ninguna página, audita la página de aterrizaje con más sesiones y enumera las siguientes cuatro como candidatas para otra ejecución.

Paso 2. Medición: ¿se cuenta la conversión de la página?

{"platform": "google-analytics", "action": "list_key_events", "property_id": "properties/<PROPERTY_ID>"}
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["pagePath", "eventName"], "metrics": ["eventCount", "totalUsers"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"filter": {"fieldName": "pagePath", "stringFilter": {"matchType": "EXACT", "value": "/"}}}}
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["pagePath", "linkUrl", "outbound"], "metrics": ["eventCount"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"andGroup": {"expressions": [
   {"filter": {"fieldName": "pagePath", "stringFilter": {"matchType": "EXACT", "value": "/"}}},
   {"filter": {"fieldName": "eventName", "stringFilter": {"matchType": "EXACT", "value": "click"}}}]}}}
ResultadoCuándo
Medidoel informe de aterrizaje muestra eventos clave para la página, o se dispara un evento clave en ella
Parcialmentesolo se registran clics en CTA (un evento de clic cuyo linkUrl es el destino del CTA)
No medidoninguno de los anteriores
  • Los eventos clave cuyos nombres contienen "test" o "qa" no cuentan. Informa cuántos se configuraron y cuántos se dispararon en la ventana.
  • El evento click integrado de GA4 registra solo enlaces salientes. Los enlaces dentro del sitio, y a dominios configurados para medición entre dominios, no se registran. Por lo tanto, ninguna fila de clic para el destino del CTA significa "no medido", nunca "nadie hizo clic".
  • Cuando la página no está medida, no hay tasa de conversión. Usa los proxies y etiquétalos como proxies: tasa de participación, la proporción de sesiones de la página que llegan a la ruta de conversión (paso 3), y desplazamiento al 90% (el evento scroll integrado; agrega deviceCategory al informe de eventos para dividirlo por dispositivo, usuarios que se desplazaron versus usuarios que vieron).

Paso 3. Quién llega y adónde van después

{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["landingPage", "sessionDefaultChannelGroup", "sessionSourceMedium"],
 "metrics": ["sessions", "engagedSessions", "engagementRate"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"filter": {"fieldName": "landingPage", "stringFilter": {"matchType": "EXACT", "value": "/"}}}}

Ejecútalo de nuevo con deviceCategory en lugar de las dimensiones de canal, y una vez más con pagePath y la métrica sessions (top 10 por sesiones) para ver a dónde envía la página a las personas. La primera fila suele ser la página misma, por lo que 10 filas muestran 9 páginas siguientes. Luego:

  • Fuentes: la proporción de sesiones de cada canal y su tasa de participación. Una fuente con 10 o más sesiones y 0 comprometidas es un problema de tráfico (un bot, un buscador de vistas previas o una etiqueta rota), no un problema de página. Señálalo y proporciona la tasa de participación de la página con y sin él.
  • Dispositivos: la cuota móvil determina cuánto pesan los hallazgos móviles.
  • Ruta de conversión: la proporción de sesiones que llegan a la página de precios, demo, registro o pago.
  • Confirma tráfico de pago. Las sesiones google / cpc cuentan como Google Ads solo cuando la sesión tiene un sessionGoogleAdsCustomerId, o la cuenta de anuncios muestra clics en esta URL. De lo contrario, llámalas "pago no confirmado" y dilo.
{"platform": "google-analytics", "action": "get_report", "property_id": "properties/<PROPERTY_ID>",
 "dimensions": ["landingPage", "sessionCampaignName", "sessionGoogleAdsCustomerId"], "metrics": ["sessions", "engagedSessions"],
 "start_date": "2026-10-01", "end_date": "2026-10-04",
 "dimensionFilter": {"andGroup": {"expressions": [
   {"filter": {"fieldName": "landingPage", "stringFilter": {"matchType": "EXACT", "value": "/"}}},
   {"filter": {"fieldName": "sessionSourceMedium", "stringFilter": {"matchType": "EXACT", "value": "google / cpc"}}}]}}}

Intención orgánica (Search Console):

{"platform": "google-search-console", "action": "search_analytics", "site_url": "https://example.com/",
 "dimensions": ["query"], "start_date": "2026-09-06", "end_date": "2026-10-03", "row_limit": 25,
 "dimension_filter_groups": [{"filters": [{"dimension": "page", "operator": "equals", "expression": "https://example.com/"}]}]}

Divide las consultas de marca (el nombre del negocio y sus errores ortográficos) del resto, y da la cuota de marca de los clics. Los visitantes de marca ya conocen el nombre: la página debe confirmarlo y dirigirlos. Las consultas sin marca llevan las palabras que el titular debería reflejar.

Coincidencia de mensajes de pago (Google Ads):

SELECT landing_page_view.unexpanded_final_url, metrics.clicks, metrics.cost_micros, metrics.conversions
FROM landing_page_view WHERE segments.date DURING LAST_30_DAYS ORDER BY metrics.clicks DESC LIMIT 20
SELECT ad_group_ad.ad.final_urls, ad_group_ad.ad.responsive_search_ad.headlines, metrics.clicks, metrics.impressions
FROM ad_group_ad WHERE segments.date DURING LAST_30_DAYS AND ad_group_ad.status = 'ENABLED'
ORDER BY metrics.clicks DESC LIMIT 20
SELECT ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.quality_info.post_click_quality_score,
       ad_group_criterion.final_urls, metrics.clicks
FROM keyword_view WHERE segments.date DURING LAST_30_DAYS AND metrics.clicks > 0 ORDER BY metrics.clicks DESC LIMIT 50

Ejecuta estas a través de action="gaql" con el account_id. Si landing_page_view no tiene filas para la página, omite las otras dos: no hay tráfico de pago que coincidir. post_click_quality_score es la calificación de experiencia de página de aterrizaje de Google (por encima del promedio, promedio, por debajo del promedio) para la palabra clave. Las URL finales de las palabras clave suelen estar vacías porque se usa la URL del anuncio, así que vincula las palabras clave a la página a través del grupo de anuncios. Conserva los anuncios cuyas final_urls apuntan a la página y compara sus titulares con el H1 y la oferta de la página. Para Meta, LinkedIn u otros anuncios, o un correo electrónico que enlace a la página, pide al usuario que pegue el anuncio o correo (titular, cuerpo, oferta y CTA) y compáralo con la página de la misma manera: el H1 refleja el titular, cada oferta y afirmación está en la página, y el CTA de la página continúa el del anuncio. La habilidad ad-landing-page-match-scorer profundiza más, si está instalada.

Paso 4. Desmonta la página

{"platform": "dataforseo", "action": "onpage_instant_pages", "url": "https://example.com/", "enable_javascript": true,
 "custom_js": "var o={seq:[],nav:0,links:document.links.length,forms:document.forms.length,inputs:document.querySelectorAll('input,select,textarea').length,imgs:0,noalt:0,vid:document.querySelectorAll('video,iframe').length,proof:{}};function E(l,f){for(var i=0;i<l.length;i++)f(l[i])}function t(e){return(e.textContent||'').replace(/\\s+/g,' ').trim()}function C(e){for(var p=e;p;p=p.parentNode){var n=(p.tagName||'').toLowerCase();if(n=='nav'||n=='header'||n=='footer')return 1}return 0}var f=0;E(document.querySelectorAll('h1,p'),function(e){if(e.tagName=='H1')f=1;else if(f==1&&t(e)){o.sub=t(e).slice(0,200);f=2}});E(document.querySelectorAll('h1,h2,h3,a[href],button'),function(e){var n=e.tagName.toLowerCase();if(n.charAt(0)=='h'){o.seq.push([n,t(e).slice(0,90)]);return}if(C(e))return;var c=(e.getAttribute('class')||'')+' '+(e.getAttribute('role')||'');if(n=='a'&&!/btn|button|cta|bg-/.test(c))return;var x=t(e).slice(0,50);if(x)o.seq.push(['cta',x,(e.getAttribute('href')||'').slice(0,80)])});E(document.querySelectorAll('header a[href],nav a[href]'),function(){o.nav++});E(document.querySelectorAll('img'),function(e){o.imgs++;if(!e.hasAttribute('alt'))o.noalt++});var x=t(document.body);o.words=x.split(' ').length;var p={testimonial:/testimonial|what .{0,12}say/i,rating:/★|\\d(\\.\\d)? ?\\/ ?5|g2|capterra|trustpilot/i,logos:/trusted by|used by|customers include/i,count:/\\d[\\d,]*\\+? (customers|users|teams|companies|marketers)/i,works_with:/works with|integrates with/i,security:/soc ?2|gdpr|encrypt/i,guarantee:/guarantee|refund|cancel anytime/i,faq:/faq|frequently asked/i};for(var k in p){var m=x.match(p[k]);o.proof[k]=m?m[0].slice(0,40):null}o;"}

custom_js_response devuelve la página en orden de lectura (seq: titulares y CTAs fuera del encabezado, navegación y pie de página), el primer párrafo después del H1 (sub), recuentos y la primera coincidencia para cada tipo de prueba. Léelo así:

  • Hero: todo antes del primer h2. Anota el H1, el subtítulo y los CTAs allí.
  • CTAs: solo los elementos con un destino (href) son CTAs. Los botones sin uno son pestañas, acordeones o un banner de cookies. Cuenta los destinos distintos y anota si el principal vuelve después de la mitad de una página larga.
  • Prueba: una coincidencia es una pista, no un veredicto. Comprueba el texto a su alrededor antes de contarlo: un número en una demo de producto o un "seguro" en una respuesta de FAQ no es prueba. Los logotipos "Funciona con" muestran compatibilidad, no clientes.
  • Salidas: recuento de enlaces de encabezado y navegación (nav). En una página de aterrizaje de pago, cada uno es una salida.
  • Formularios: forms e inputs.
  • De la respuesta estándar: meta.title, meta.htags, meta.content.plain_text_word_count, los índices de legibilidad y checks (no_h1_tag, has_render_blocking_resources, no_image_alt, title_too_long). no_image_alt puede ser verdadero mientras el script encuentra un atributo alt, porque checks revisa las imágenes en el HTML renderizado, no solo las que encontró el script.

Paso 5. Renderiza la página en escritorio y móvil

Captura de pantalla del escritorio completo:

{"platform": "screenshot", "action": "capture", "url": "https://example.com/", "viewport": {"width": 1440, "height": 900}, "full_page": true}

Captura de pantalla de la ventana gráfica móvil:

{"platform": "screenshot", "action": "capture", "url": "https://example.com/", "viewport": {"width": 375, "height": 812}, "full_page": false}

Métricas de velocidad de página (escritorio):

{"platform": "pagespeed-insights", "action": "core-web-vitals", "url": "https://example.com/", "strategy": "desktop"}

Métricas de velocidad de página (móvil):

{"platform": "pagespeed-insights", "action": "core-web-vitals", "url": "https://example.com/", "strategy": "mobile"}

Verificación de accesibilidad y SEO:

{"platform": "pagespeed-insights", "action": "accessibility-seo", "url": "https://example.com/", "strategy": "desktop"}

Qué buscar en las capturas de pantalla

Escritorio (ancho de 1440 píxeles):

  • Doblez: la línea donde los usuarios deben desplazarse. Mide la altura de la ventana gráfica (unos 800 píxeles) desde la parte superior. ¿El H1, el subtítulo y el CTA principal son visibles sin desplazarse? ¿El CTA principal está por encima del pliegue?
  • Espacio en blanco: ¿el texto se extiende a lo ancho de la página (más de 60-70 caracteres por línea), o hay márgenes anchos? ¿Los párrafos tienen espacio para respirar?
  • Jerarquía visual: ¿el H1 es claramente el elemento más grande? ¿Los H2 son más pequeños? ¿Los CTAs se destacan de los enlaces de texto normal?
  • Peso de los CTAs: (el CTA principal es visualmente dominante) o (el CTA principal compite con enlaces de navegación, otros botones o imágenes). El CTA debería ser, con diferencia, el elemento con más color y contraste en la ventana gráfica inicial.

Móvil (ancho de 375 píxeles):

  • Toque: ¿están los botones a al menos 48 píxeles de alto? ¿Hay suficiente espacio entre los enlaces para que un dedo golpee el correcto?
  • Lectura: ¿el tamaño del texto del cuerpo es de al menos 16 píxeles (el mínimo de iOS y Android para que el navegador no haga zoom)? ¿Las líneas tienen 40-60 caracteres?
  • Desplazamiento del hero: ¿se ve inmediatamente el H1 y el CTA, o está el menú de hamburguesa y el logotipo ocupando la mitad de la pantalla?

Paso 6. Evalúa la página contra los siete pilares

Cada pilar obtiene una puntuación del 1 al 10. Una puntuación del 5 es el punto de referencia: una empresa SaaS típica en una página de aterrizaje de pago. Las puntuaciones son ordinales: un 6 es mejor que un 5, pero un 10 es raro.

PilarQué midePonderación en la puntuación generalCoopera con
SeguimientoSi la conversión se mide correctamente; si el seguimiento de CTA funciona; manejo de etiquetas rotas15%Paso 2
TráficoCalidad de la fuente (orgánico vs. pago vs. directo); engagement por canal; puntuación de calidad de anuncios; ajuste del mensaje del anuncio; tasa de rebote de búsqueda (profundidad de desplazamiento)15%Paso 3
IntenciónAjuste entre la consulta de búsqueda y el H1; cobertura de palabras clave no relacionadas; porcentaje de clics de marca; consultas perdidas (términos con clics pero sin impresiones para esta página); ajuste del anuncio de pago y la página; claridad de la oferta15%Paso 3
EstructuraHero (H1, subtítulo, CTA); presencia y colocación del CTA principal; peso de los CTAs; cantidad de opciones; punto de elección (demasiados CTAs compitiendo); navegación (salidas); disposición y ritmo del contenido; agrupación de características; manejo de la prueba; formularios (longitud, fricción); pie de página (enlaces, CTAs)20%Pasos 4, 5
PruebaTestimonios (específicos del rol, numerados, con nombre); calificaciones (G2, Capterra); estudios de caso; logotipos de clientes; recuentos de usuarios; premios; garantías; certificaciones de seguridad; premios; sellos de confianza; escasez/urgencia15%Paso 4
VelocidadLCP (pintura con el contenido más grande); TBT (tiempo total de bloqueo); CLS (cambio de diseño acumulativo); recursos que bloquean el renderizado; optimización de imágenes; peso de la página; diferimiento de JS10%Paso 5
MóvilCapacidad de toque; tamaño de fuente; espacio para lectura; visibilidad del hero; rendimiento móvil; resultados de la prueba de amigabilidad móvil10%Pasos 4, 5

Puntúa cada pilar una vez, con una justificación de una línea. Por ejemplo: "Estructura: 4. El H1 es débil (8 palabras, sin verbo), no hay subtítulo, el CTA está debajo de 3 párrafos de texto," o "Velocidad: 7. LCP 1.8 s en escritorio, pero la página carga 3 scripts de análisis que no son del core." La puntuación general es el promedio ponderado de los pilares. Redondea la puntuación general al número entero más cercano.

Paso 7. Ejecuta el revisor y escribe el informe

Después de la puntuación, llama al revisor para cada pilar. El revisor toma el pilar, el valor actual y el contexto (las filas de datos y las observaciones que llevaron a la puntuación) y devuelve:

  • Correcciones: hasta 5 cosas que arreglar, ordenadas por impacto. Cada una con una frase corta y una línea modificada para la página.
  • Reescrituras: para el H1, el subtítulo, las secciones de prueba, los CTAs, el pie de página y cualquier elemento de página que el revisor considere que necesita cambio, versión que el usuario puede copiar y pegar.

Guarda el JSON del revisor tal como se devuelve para depuración.

Luego escribe el informe de auditoría. Comienza con un resumen ejecutivo: la puntuación general, el tipo de página, las fuentes de datos utilizadas (y perdidas) y lo que el usuario debe hacer primero. Sigue con una tabla que muestre la puntuación de cada pilar y las 3 correcciones principales. Luego, una página por pilar, con la sección de datos, la justificación de la puntuación y las correcciones. Termina con el apéndice técnico: ventanas de fechas, advertencias de datos, fallos de API y el JSON del revisor.

La longitud del informe debe coincidir con la gravedad del problema: un 9 en velocidad no necesita 3 párrafos; un 3 en estructura sí. No alabes; corrige. Los halagos no convierten.

Nota sobre los datos de Google Ads

El informe de Google Ads solo es posible si list_accounts de google-ads devuelve una cuenta para el brand_id y esa cuenta tiene un customer_id activo. Omite la sección de anuncios si la cuenta no existe o no muestra clics.

Ejemplo de salida

(No incluido - la salida de muestra es la versión en inglés. La salida real estará en el idioma de la solicitud del usuario.)

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills relacionados