

# Cómo guardar capturas comparables de posiciones por palabra clave en Bing

Guardá cada posición de Bing con la misma consulta, país, idioma, configuración, límite de resultados y hora de observación. Una posición es el número de orden dentro de la muestra recopilada. Un número menor indica que el resultado apareció antes. El límite de resultados es la cantidad máxima de resultados que se guardan para una consulta. Compará solo capturas que coincidan en todos esos aspectos. Una captura es una ejecución guardada. Si tu página no aparece en una muestra con límite de resultados, registrá que no se observó en esa muestra. No inventes una posición. No afirmes que la página está ausente de todo Bing.

## Qué vas a guardar

Un Actor es un programa alojado que recopila datos. Este método usa el Actor [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper), compilación 1.0.15. Una Task es una configuración de entrada guardada. La Task actual [Keyword Search Rank Snapshot](https://apify.com/chronometrica/google-search-scraper/examples/keyword-rank-snapshot) solo proporciona una configuración de entrada inicial. No analiza posiciones por sí sola.

El Actor guarda filas de la fuente. Vos comparás esas filas con los pasos que siguen.

La compilación 1.0.15 puede recibir Google, Bing, Brave y DuckDuckGo en la lista engines. Este método solo admite Bing. No incluyas Google, Brave ni DuckDuckGo en este registro. Una ruta de Google que se había conservado devolvió direcciones de redirección que ocultan el sitio final. Esas direcciones no se aceptan como URL de destino.

El registro es tu tabla de capturas. Este registro no equivale a la posición media de Google Search Console. Tampoco representa la posición que ve cada persona.

## Configurá la entrada para Bing

La Task actual [Keyword Search Rank Snapshot](https://apify.com/chronometrica/google-search-scraper/examples/keyword-rank-snapshot) guarda esta entrada:

```json
{
  "queries": ["best CRM", "small business accounting software", "AI marketing tools"],
  "engines": ["google", "bing", "brave", "duckduckgo"],
  "maxResultsPerExecutedQuery": 20,
  "country": "US",
  "language": "en",
  "safeSearch": true,
  "includeSponsoredResults": false
}
```

Configurá la entrada para Bing

Reemplazá toda la lista queries. Reemplazá toda la lista engines. Para la primera comprobación, usá 1 consulta que quieras evaluar. Establecé engines en ["bing"]. Establecé maxResultsPerExecutedQuery en 2. Configurá country y language con la combinación que vas a repetir. Mantené safeSearch en true. Mantené includeSponsoredResults en false.

Esta entrada no tiene una opción de expansión. Tampoco tiene un campo público para limitar la cantidad de páginas. El límite de resultados es maxResultsPerExecutedQuery. No agregues un campo para limitar la cantidad de páginas.

Solicitar un país no elimina la personalización. La personalización significa que Bing puede seguir mostrando resultados distintos a distintas personas. El país no garantiza el resultado que ve cada usuario local.

Usá esta estructura para la primera comprobación. Colocá tu frase real en queries:

```json
{
  "queries": ["one intended phrase"],
  "engines": ["bing"],
  "maxResultsPerExecutedQuery": 2,
  "country": "US",
  "language": "en",
  "safeSearch": true,
  "includeSponsoredResults": false
}
```

Configurá la entrada para Bing

Cambiá country y language solo si la nueva combinación es la que vas a mantener. Registrá los mismos valores en cada captura posterior.

Fijá estas opciones antes de la primera comparación:

- el texto exacto de la consulta
- country
- language
- safeSearch
- includeSponsoredResults
- maxResultsPerExecutedQuery

Un cambio posterior en el límite puede modificar el orden aparente. Un cambio posterior en la forma de leer los resultados también puede hacerlo. Mantené un alcance de recopilación similar al comparar.

## Leé cada fila de resultados

Cada fila es 1 resultado observado para 1 buscador, 1 consulta, 1 página de resultados y 1 posición. El Actor puede guardar muchas consultas en 1 ejecución. No las agrupa en una sola fila por sitio web. Para este método, la ejecución debe contener 1 consulta de Bing.

Estos son los nombres exactos de los campos de cada fila del Actor [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper):

- runId
- country
- language
- safeSearch
- engine
- executedQuery
- page
- rankOnPage
- rank
- title
- canonicalUrl
- resultDomain
- snippet
- isSponsored
- advertiserDomain
- observedAt
- schemaVersion

rank es la posición dentro de la muestra recopilada en esa ejecución específica. rankOnPage es la posición en esa página de resultados. page es el número de la página de resultados.

canonicalUrl es la cadena de texto de la dirección que el Actor guardó después de depurar el enlace. Es una dirección candidata. No es un enlace HTML rel=canonical verificado. Tampoco es una copia exacta del href original. Conservá la cadena devuelta sin cambios. Esa cadena es tu evidencia de la fuente.

snippet es texto del resultado de búsqueda. No es el texto del artículo del sitio de destino. No demuestra ninguna afirmación de ese sitio.

isSponsored indica si la fila es un resultado pago. Un resultado orgánico es un resultado no pago. Mantené separadas las filas pagas y las no pagas. Con includeSponsoredResults en false, no consideres que una fila patrocinada representa la posición orgánica.

advertiserDomain puede aparecer en una fila patrocinada. No representa una segunda posición orgánica.

Los valores country, language y safeSearch de la fila representan el contexto solicitado. No garantizan cómo será cada resultado personalizado.

El Actor no abre el sitio de destino. No elimina todo el texto adicional de la página. No verifica las citas. No evalúa las ventas. No programa la próxima ejecución. Si necesitás comprobar el destino, tenés que hacerlo por tu cuenta.

## Leé el resumen de la ejecución

OUTPUT es el resumen de la ejecución. Está separado de cada fila de resultados. Leé ambos. OUTPUT usa estos campos:

- queriesRequested
- searchesCompiled
- executionsPlanned
- enginesSuccessful
- enginesFailed
- pagesAttempted
- pagesParsed
- resultsSaved
- engineStatusCounts
- engineResultCounts
- queryResultCounts
- stopReason

Una prueba de control actual de Bing en este Actor usó la consulta Python asyncio documentation. El Actor intentó procesar 1 página de resultados y la analizó. Guardó 2 filas. Ambas filas contenían URL directas de docs.python.org. engine era bing. executedQuery contenía esa frase exacta. page era 1. Una fila tenía rank 1. La otra tenía rank 2. Cada fila incluía observedAt.

El OUTPUT de la prueba de control fue:

```json
{
  "queriesRequested": 1,
  "searchesCompiled": 1,
  "executionsPlanned": 1,
  "enginesSuccessful": 1,
  "enginesFailed": 0,
  "pagesAttempted": 1,
  "pagesParsed": 1,
  "resultsSaved": 2,
  "engineStatusCounts": {"bing": {"ok": 1}},
  "engineResultCounts": {"bing": 2},
  "queryResultCounts": {"Python asyncio documentation": 2},
  "stopReason": "result_caps_reached"
}
```

Leé el resumen de la ejecución

Los valores conocidos de las filas de la prueba de control son:

| Campo | Valor de la prueba de control |
| --- | --- |
| engine | bing |
| executedQuery | Python asyncio documentation |
| page | 1 |
| rank | 1 y 2 |
| canonicalUrl | 2 URL directas de docs.python.org |
| observedAt | presente en cada fila |

El valor result_caps_reached de stopReason significa que la ejecución alcanzó el límite de resultados. No significa que Bing tenga solo 2 resultados.

Esta prueba de control comprueba una muestra limitada de Bing. Comprueba la URL, la posición y los datos guardados de la consulta, la página de resultados y la hora. No prueba Google, Brave ni DuckDuckGo. No prueba todos los operadores de búsqueda. No prueba todos los países. No vuelve a comprobar la posición más adelante. No mide un cambio de posición. No mide el tráfico. No extrae datos del sitio de destino.

Si enginesFailed no es 0, no afirmes que el objetivo está ausente.  Una consulta fallida no tiene un estado de objetivo ausente.

Una muestra vacía tampoco representa una cobertura completa de Bing. Los resultados limitados, fallidos o vacíos solo describen esa ejecución.

## Compará capturas en 8 pasos

### 1. Elegí el objetivo y una lista breve de consultas fijas.

Definí el objetivo antes de revisar los cambios de posición. Un objetivo de página exacta es una dirección y una ruta declaradas. Un objetivo de dominio es la página aceptada con la mejor posición en un mismo host, es decir, un nombre de servidor. Indicá en cuál de estas opciones se basa la decisión. Una lista breve y fija significa que repetís las mismas frases. La primera comprobación sigue usando 1 frase y solo Bing. Agregá otra frase únicamente como una fila fija independiente, con la misma configuración.

Un registro limitado de Bing no informa la posición media de Google Search Console. Tampoco informa la posición que ve cada persona.

### 2. Fijá Bing y la configuración de la muestra.

Reemplazá la lista de buscadores de la Task por engines ["bing"]. Reemplazá las consultas de ejemplo por 1 consulta que quieras evaluar en la primera comprobación. Establecé maxResultsPerExecutedQuery en 2 para esa prueba piloto. Fijá country, language, safeSearch, includeSponsoredResults y el límite de resultados.

Las mismas palabras en otro país producen una captura distinta. La búsqueda segura activada y desactivada producen capturas distintas. Un límite de 2 y uno de 10 producen capturas distintas. Solicitar un país sigue sin garantizar el resultado que ve cada usuario local.

### 3. Revisá las filas obtenidas correctamente y OUTPUT.

Conservá executedQuery, rank, rankOnPage, page y observedAt de cada fila obtenida correctamente. Guardá junto a ellas los recuentos de OUTPUT y stopReason. La pequeña prueba de control actual tiene 2 URL directas con posición asignada en la página de resultados 1. Esa prueba de control no representa un cambio medido para tu página.

Si la consulta falló, no asignes al objetivo un estado de ausencia. Guardá source_failed en su lugar.

### 4. Aplicá de forma explícita la regla para identificar el objetivo.

Para una página exacta, comprobá la coincidencia según la regla de dirección y ruta que declaraste. Conservá el canonicalUrl devuelto. No cambies la cadena devuelta.

Para un dominio, comprobá que coincida el host previsto. Entre las filas orgánicas aceptadas de ese host, conservá el menor valor de rank. Ese valor es la mejor posición del dominio observada en la muestra.

No agrupes resultados por un nombre de empresa parecido. No agrupes un subdominio distinto. No agrupes una redirección de seguimiento a menos que la compruebes y aceptes el destino. Si la identidad no está clara, el estado es unresolved_target.

### 5. Guardá 1 estado válido. Nunca guardes una posición inventada.

Usá observed_rank cuando el objetivo coincida con una fila. Una muestra útil proviene de una ejecución finalizada correctamente y tiene registrado su límite. Usá not_seen_within_cap cuando esa muestra no contenga el objetivo. Usá source_failed cuando falle la recopilación. Usá unresolved_target cuando no puedas determinar si una fila corresponde al objetivo.

No uses 0. No uses cap + 1. Esos números parecen posiciones, pero no son posiciones observadas.

Con el límite de 2 de la prueba piloto, un objetivo que no aparece recibe el estado not_seen_within_cap para un límite de 2. La página podría aparecer más adelante. La posición real sigue siendo desconocida. La misma regla se aplica a cualquier límite mayor que fijes después.

### 6. Repetí la misma entrada más adelante.

Volvé a ejecutar la entrada fija cuando decidas destinar ese presupuesto. Guardá la nueva captura como una [nueva observación](/es/articles/combinar-exportaciones-de-bing-sin-perder-evidencia/). No sobrescribas la anterior.

La Task no supervisa las posiciones por sí sola. Programar ejecuciones periódicas es un paso aparte que configurás de forma explícita. Compará la misma consulta y la misma regla del objetivo. Usá el mismo país, idioma y valor de safeSearch. Usá la misma configuración de resultados patrocinados y un alcance de recopilación similar.

Si cambió el límite, no consideres comparable el par de capturas. Si cambió la forma de leer los resultados, tampoco lo consideres comparable.

### 7. Calculá el cambio de posición solo para 2 posiciones conocidas.

El cambio de posición se calcula con una resta simple. Cambio de posición = posición anterior - posición nueva. Un resultado positivo significa que el nuevo número de posición es menor. El resultado aparece antes en la muestra nueva que en la anterior.

Excluí not_seen_within_cap de esa resta. Excluí también source_failed y unresolved_target. No promedies valores desconocidos con posiciones reales. No promedies números sustitutos como 0 o cap + 1.

Un cambio en el orden de esta muestra no demuestra un cambio en el tráfico. No demuestra un cambio en las ventas. No demuestra que una modificación del contenido haya causado el cambio.

### 8. Entregá el registro y terminá con una comparación de posiciones conocidas.

Creá 1 fila del registro por consulta y regla del objetivo. Incluí la ejecución de origen, el contexto, el límite, el estado y una nota sobre la comparación. Mantené Google y cualquier otro buscador en un lugar separado. No presentes afirmaciones sobre ellos en este registro.

Terminá con 1 par de capturas equivalentes o indicá que la comparación no está resuelta. No completes la información faltante con una posición supuesta.

## Un registro ficticio de posiciones

La tabla siguiente es un ejemplo ficticio original. Sirve para explicar los estados. No es un resultado del Actor. No es la prueba de control de Bing anterior. La página objetivo ficticia es https://garden.example/guide. El dominio ficticio es garden.example. S1 es la captura anterior. S2 es la captura más reciente. Ambas capturas de Q1 usan la misma configuración de Bing y el mismo límite de los primeros 10 resultados. El límite de 2 de la prueba piloto tiene un alcance distinto. No mezcles estos límites. No se proporcionan fechas, por lo que no se muestra ninguna.

Q1 compara la página exacta de la guía. S1 registra la posición 7. S2 registra la posición 4. Ambas posiciones están dentro de muestras equivalentes de los primeros 10 resultados. Cambio de posición = 7 - 4 = +3. Según esta definición, la página avanzó 3 posiciones hacia el inicio de la muestra.

Q2 usa la misma página exacta y el mismo límite de 10. S1 registra la posición 2. S2 tiene el estado not_seen_within_cap para un límite de 10. La nueva posición es desconocida. El cambio de posición es desconocido. No guardes 11. La página podría ocupar una posición posterior a la 10. No sabés cuál es esa posición posterior.

Q3 usa la misma página exacta. No se proporcionaron la posición ni la hora de S1, por lo que S1 sigue siendo desconocida. S2 tiene el estado source_failed. La comparación no está disponible. Esto no representa una pérdida de posiciones. El fallo significa que no se recopiló la nueva muestra.

Q4 es 1 captura del dominio, no un par de capturas para medir un cambio de posición. Hay 2 páginas aceptadas del dominio con posiciones orgánicas 3 y 8. Si el objetivo es el dominio, la mejor posición observada es 3. Si el objetivo es la página exacta de la guía, esa página puede ocupar la posición 8. Otra página del dominio puede ocupar la posición 3 al mismo tiempo. Indicá qué definición usás. No informes 3 como la posición de la página exacta.

| Consulta | Regla del objetivo | Estado de S1 | Estado de S2 | Cambio de posición | Conclusión respaldada |
| --- | --- | --- | --- | --- | --- |
| Q1 | Página exacta https://garden.example/guide | observed_rank 7 | observed_rank 4 | 7 - 4 = +3 | Par de posiciones conocidas dentro de muestras equivalentes de los primeros 10 resultados |
| Q2 | Página exacta, límite de 10 | observed_rank 2 | not_seen_within_cap 10 | desconocido | No equivale a la posición 11 ni a un cambio de posición de 2 - 11 |
| Q3 | Página exacta | desconocido | source_failed | desconocido | Comparación no disponible; no representa una pérdida de posiciones |
| Q4 | Dominio garden.example o página exacta de la guía | 1 captura: posiciones aceptadas 3 y 8 | La misma captura, no un segundo momento | ninguno | La posición mínima del dominio es 3. La página exacta de la guía puede ocupar la 8 |

Alguien podría inventar una posición 11 para Q2. Luego podría calcular 2 - 11 = -9. Ese -9 no es una observación. Promediar el +3 de Q1 con ese -9 inventado produce un resumen falso. Mostrá primero el par de posiciones conocidas. Mostrá la ausencia limitada a la muestra. Mostrá el fallo de la fuente. Excluí los estados desconocidos de cualquier promedio.

Estos valores de S1 y S2 son estados del registro usados para la explicación. No son campos de posición nativos de la prueba de control. Esa prueba de control guardó solo las posiciones 1 y 2. No midió ningún cambio.

## Próxima acción

Guardá 1 captura de Bing con tu consulta exacta, país, idioma, configuración de safeSearch, configuración de resultados patrocinados y límite de resultados. Registrá 1 estado válido del objetivo: posición observada, no observado dentro del límite, fallo de la fuente u objetivo sin resolver. Empezá con el Actor [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper) y la Task actual [Keyword Search Rank Snapshot](https://apify.com/chronometrica/google-search-scraper/examples/keyword-rank-snapshot). Antes de comparar cualquier resultado, modificá esa Task para que use 1 consulta y engines ["bing"].

## Fuentes y lecturas adicionales

- [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper)
- [Keyword Search Rank Snapshot](https://apify.com/chronometrica/google-search-scraper/examples/keyword-rank-snapshot)
- [https://www.reddit.com/r/SEO/comments/1dybuk8/any_tools_to_just_monitor_specific_keyword_ranking/](https://www.reddit.com/r/SEO/comments/1dybuk8/any_tools_to_just_monitor_specific_keyword_ranking/)
- [https://www.reddit.com/r/SEO/comments/1d5kve4/how_to_check_if_you_ranked_on_a_keyword/](https://www.reddit.com/r/SEO/comments/1d5kve4/how_to_check_if_you_ranked_on_a_keyword/)