

# Comment conserver des relevés comparables de positions de mots-clés sur Bing

Enregistrez chaque position Bing avec la même requête, le même pays, la même langue, les mêmes paramètres, le même plafond de résultats et l’heure d’observation. Une position est le numéro de classement dans l’échantillon collecté. Un numéro plus petit signifie que le résultat apparaissait plus tôt. Le plafond de résultats est le nombre maximal de résultats conservés pour 1 requête. Comparez uniquement les relevés qui concordent sur tous ces points. Un relevé correspond à 1 exécution enregistrée. Si votre page ne figure pas dans un échantillon plafonné, notez qu’elle n’a pas été vue dans cet échantillon. N’inventez pas de position. N’affirmez pas que la page est absente de tout Bing.

## Ce que vous enregistrez

Un Actor est un programme hébergé qui collecte des données. Cette méthode utilise l’Actor [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper), build 1.0.15. Une Task est un ensemble de paramètres d’entrée enregistré. La Task actuelle [Keyword Search Rank Snapshot](https://apify.com/chronometrica/google-search-scraper/examples/keyword-rank-snapshot) fournit uniquement des paramètres de départ. Elle n’analyse pas les positions à elle seule.

L’Actor enregistre les lignes issues de la source. Vous comparez ces lignes en suivant les étapes ci-dessous.

Le build 1.0.15 peut accepter Google, Bing, Brave et DuckDuckGo dans la liste des moteurs. Cette méthode accepte uniquement Bing. Gardez Google, Brave et DuckDuckGo hors de ce registre. Un parcours Google non retenu a renvoyé des adresses de redirection qui masquent le site final. Ces adresses ne sont pas des URL de destination acceptées.

Un registre est votre tableau de relevés. Ce registre ne correspond pas à la position moyenne de Google Search Console. Il ne donne pas la position que voit chaque personne.

## Configurez les paramètres d’entrée pour Bing

La Task actuelle [Keyword Search Rank Snapshot](https://apify.com/chronometrica/google-search-scraper/examples/keyword-rank-snapshot) enregistre ces paramètres d’entrée :

```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
}
```

Configurez les paramètres d’entrée pour Bing

Remplacez toute la liste queries. Remplacez toute la liste engines. Pour le premier contrôle, utilisez 1 requête que vous souhaitez suivre. Réglez engines sur ["bing"]. Réglez maxResultsPerExecutedQuery sur 2. Réglez country et language sur la paire de valeurs que vous réutiliserez. Gardez safeSearch à true. Gardez includeSponsoredResults à false.

Ces paramètres d’entrée ne comportent aucun réglage d’expansion. Ils ne comportent aucun champ public de limite de pages. Le plafond de résultats est maxResultsPerExecutedQuery. N’ajoutez pas de champ de plafond de pages.

Le pays demandé ne supprime pas la personnalisation. La personnalisation signifie que Bing peut toujours présenter des résultats différents à des personnes différentes. Le pays ne garantit pas le résultat de chaque utilisateur local.

Utilisez cette structure pour le premier contrôle. Placez votre véritable expression dans queries :

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

Configurez les paramètres d’entrée pour Bing

Modifiez country et language uniquement si la nouvelle paire de valeurs est celle que vous conserverez. Notez les mêmes valeurs sur chaque relevé ultérieur.

Fixez ces choix avant la première comparaison :

- le texte exact de la requête
- country
- language
- safeSearch
- includeSponsoredResults
- maxResultsPerExecutedQuery

Une modification ultérieure du plafond peut modifier l’ordre apparent. Une modification ultérieure de la façon de lire les résultats peut aussi le modifier. Gardez un périmètre de collecte similaire lors des comparaisons.

## Lisez chaque ligne de résultat

1 ligne correspond à 1 résultat observé pour 1 moteur, 1 requête, 1 page de résultats et 1 position. L’Actor peut conserver de nombreuses requêtes dans 1 exécution. Il ne les regroupe pas en 1 ligne par site Web. Pour cette méthode, l’exécution doit contenir 1 requête Bing.

Voici les noms exacts des champs des lignes de l’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 est la position dans l’échantillon collecté pour cette exécution précise. rankOnPage est la position sur cette page de résultats. page est le numéro de la page de résultats.

canonicalUrl est la chaîne d’adresse que l’Actor a enregistrée après avoir nettoyé le lien. Il s’agit d’une adresse candidate. Ce n’est pas un lien HTML rel=canonical vérifié. Ce n’est pas une copie parfaite du href d’origine. Conservez la chaîne renvoyée sans la modifier. Cette chaîne constitue votre preuve issue de la source.

snippet est un texte issu du résultat de recherche. Ce n’est pas le texte de l’article du site de destination. Il ne prouve pas une affirmation de ce site.

isSponsored indique si la ligne est un résultat payant. Un résultat naturel est un résultat non payant. Séparez les lignes payantes des lignes non payantes. Lorsque includeSponsoredResults est réglé sur false, ne considérez pas une ligne sponsorisée comme la position naturelle.

advertiserDomain peut apparaître sur une ligne sponsorisée. Il ne s’agit pas d’une seconde position naturelle.

Les champs country, language et safeSearch de la ligne représentent le contexte demandé. Ils ne garantissent pas chaque résultat personnalisé.

L’Actor n’ouvre pas le site de destination. Il ne supprime pas tout le texte superflu des pages. Il ne vérifie pas les citations. Il n’attribue pas de score aux ventes. Il ne planifie pas l’exécution suivante. Si vous avez besoin de vérifier la destination, vous devez effectuer ce contrôle vous-même.

## Lisez le résumé d’exécution

OUTPUT est le résumé d’exécution. Il est distinct de chaque ligne de résultat. Lisez les 2. OUTPUT utilise les champs suivants :

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

Un test de contrôle Bing actuel sur cet Actor a utilisé la requête Python asyncio documentation. L’Actor a tenté de récupérer 1 page de résultats et a analysé cette page. Il a enregistré 2 lignes. Les 2 lignes contenaient des URL directes de docs.python.org. engine valait bing. executedQuery contenait cette expression exacte. page valait 1. Une ligne avait rank à 1. L’autre ligne avait rank à 2. Chaque ligne comportait observedAt.

Le contenu d’OUTPUT pour le test de contrôle était le suivant :

```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"
}
```

Lisez le résumé d’exécution

Les valeurs connues des lignes du test de contrôle sont les suivantes :

| Champ | Valeur du test de contrôle |
| --- | --- |
| engine | bing |
| executedQuery | Python asyncio documentation |
| page | 1 |
| rank | 1 et 2 |
| canonicalUrl | 2 URL directes de docs.python.org |
| observedAt | présent sur chaque ligne |

La valeur result_caps_reached de stopReason signifie que l’exécution a atteint le plafond de résultats. Elle ne signifie pas que Bing ne contient que 2 résultats.

Ce test de contrôle vérifie un échantillon Bing de portée limitée. Il vérifie l’URL, la position ainsi que la requête, la page de résultats et l’heure enregistrées. Il ne teste ni Google, ni Brave, ni DuckDuckGo. Il ne teste pas tous les opérateurs de recherche. Il ne teste pas tous les pays. Il ne relève pas de nouveau la position plus tard. Il ne mesure pas une évolution de position. Il ne mesure pas le trafic. Il n’extrait pas les données du site de destination.

Si enginesFailed est différent de 0, ne déclarez pas la cible absente.  Une requête qui a échoué ne permet pas d’attribuer un état d’absence à la cible.

Un échantillon vide ne couvre pas non plus tout Bing. Les résultats plafonnés, en échec ou vides décrivent uniquement cette exécution.

## Comparez les relevés en 8 étapes

### 1. Choisissez la cible et une courte liste fixe de requêtes.

Définissez la cible avant d’examiner l’évolution. Une cible de type page exacte correspond à 1 adresse et à 1 chemin déclarés. Une cible de type domaine correspond à la page acceptée la mieux classée sur 1 hôte. Précisez le choix sur lequel repose la décision. Une courte liste fixe signifie que vous répétez les mêmes expressions. Le premier contrôle utilise toujours 1 seule expression et Bing uniquement. N’ajoutez une autre expression que sur sa propre ligne fixe, avec les mêmes paramètres.

Un registre Bing de portée limitée ne donne pas la position moyenne de Google Search Console. Il ne donne pas la position vue par chaque personne.

### 2. Fixez Bing et les paramètres de l’échantillon.

Remplacez la liste des moteurs de la Task par engines ["bing"]. Remplacez les requêtes d’exemple par 1 requête que vous souhaitez suivre pour le premier contrôle. Réglez maxResultsPerExecutedQuery sur 2 pour cet essai pilote. Fixez country, language, safeSearch, includeSponsoredResults et le plafond de résultats.

Les mêmes mots dans un autre pays correspondent à un relevé différent. Une recherche avec le filtre de recherche sécurisée activé et une recherche avec ce filtre désactivé correspondent à des relevés différents. Un plafond de 2 et un plafond de 10 correspondent à des relevés différents. Le pays demandé ne garantit toujours pas le résultat de chaque utilisateur local.

### 3. Examinez les lignes obtenues avec succès et OUTPUT.

Conservez executedQuery, rank, rankOnPage, page et observedAt de chaque ligne obtenue avec succès. Conservez les décomptes d’OUTPUT et stopReason à côté de ces valeurs. Le petit test de contrôle actuel contient 2 URL directes classées sur la page de résultats 1. Ce test de contrôle ne mesure pas une évolution de votre page.

Si la requête a échoué, n’attribuez pas un état d’absence à la cible. Enregistrez plutôt source_failed.

### 4. Identifiez la cible selon une règle définie.

Pour une page exacte, appliquez votre règle déclarée d’adresse et de chemin. Conservez la valeur canonicalUrl renvoyée. Ne modifiez pas la chaîne renvoyée.

Pour un domaine, recherchez l’hôte prévu. Parmi les lignes de résultats naturels acceptées pour cet hôte, conservez la plus petite valeur de rank. Cette plus petite valeur correspond à la meilleure position observée du domaine dans l’échantillon.

N’assimilez pas à la cible une entreprise dont le nom est similaire. N’assimilez pas à la cible un autre sous-domaine. N’assimilez pas à la cible une redirection de suivi sans vérifier cette redirection et accepter la destination. Si l’identité reste incertaine, l’état est unresolved_target.

### 5. Enregistrez 1 état valide. N’enregistrez jamais de position inventée.

Utilisez observed_rank lorsque la cible correspond à une ligne. Un échantillon exploitable provient d’une exécution terminée avec succès, dont le plafond a été enregistré. Utilisez not_seen_within_cap lorsque cet échantillon ne contient pas la cible. Utilisez source_failed lorsque la collecte a échoué. Utilisez unresolved_target lorsque vous ne pouvez pas déterminer si une ligne correspond à la cible.

N’utilisez pas 0. N’utilisez pas cap + 1. Ces nombres ressemblent à des positions, mais ce ne sont pas des positions observées.

Avec le plafond pilote de 2, une cible non vue reçoit l’état not_seen_within_cap pour un plafond de 2. La page pourrait apparaître plus loin. Sa véritable position reste inconnue. La même règle s’applique à tout plafond supérieur que vous fixerez par la suite.

### 6. Réutilisez les mêmes paramètres d’entrée plus tard.

Relancez l’exécution avec les paramètres d’entrée fixes lorsque vous choisissez d’y consacrer ce budget. Enregistrez le nouveau relevé comme une [nouvelle observation](/fr/articles/fusionner-exports-recherche-bing/). N’écrasez pas l’ancien.

La Task ne surveille pas les positions à elle seule. La planification est une étape distincte que vous configurez volontairement. Comparez la même requête et la même règle de cible. Utilisez les mêmes valeurs de country, language et safeSearch. Utilisez le même réglage pour les résultats sponsorisés et un périmètre de collecte similaire.

Si le plafond a changé, ne considérez pas la paire de relevés comme comparable. Si la façon de lire les résultats a changé, ne considérez pas la paire de relevés comme comparable.

### 7. Calculez l’évolution uniquement pour 2 positions connues.

L’évolution se calcule par une simple soustraction. Évolution = ancienne position - nouvelle position. Un résultat positif signifie que le numéro de la nouvelle position est plus petit. Le résultat apparaît plus tôt dans le nouvel échantillon que dans l’ancien.

Excluez not_seen_within_cap de cette soustraction. Excluez également source_failed et unresolved_target. Ne calculez pas de moyenne mêlant des valeurs inconnues et des positions réelles. Ne calculez pas de moyenne avec des nombres de remplacement tels que 0 ou cap + 1.

Une modification de l’ordre dans cet échantillon ne prouve pas une évolution du trafic. Elle ne prouve pas une évolution des ventes. Elle ne prouve pas qu’une modification du contenu a causé cette évolution.

### 8. Livrez le registre et limitez-vous à une comparaison connue.

Créez 1 ligne de registre par requête et règle de cible. Indiquez l’exécution source, le contexte, le plafond, l’état et une note de comparaison. Conservez Google et tout autre moteur dans un emplacement distinct. Ne formulez pas de conclusions à leur sujet ici.

Terminez avec 1 paire de relevés concordants, ou indiquez que la comparaison reste indéterminée. Ne comblez pas le manque par une position supposée.

## Un registre fictif de positions

Le tableau ci-dessous est un exemple fictif original. Il sert à expliquer les états. Ce n’est pas un résultat de l’Actor. Ce n’est pas le test de contrôle Bing présenté ci-dessus. La page cible fictive est https://garden.example/guide. Le domaine fictif est garden.example. S1 est le relevé le plus ancien. S2 est le relevé le plus récent. Les 2 relevés Q1 utilisent les mêmes paramètres Bing et le même plafond de 10 premiers résultats. Le plafond pilote de 2 correspond à un autre périmètre. Ne mélangez pas ces plafonds. Aucune date n’est fournie, donc aucune n’est affichée.

Q1 compare la page exacte du guide. S1 observe la position 7. S2 observe la position 4. Les 2 positions se trouvent dans des échantillons équivalents limités aux 10 premiers résultats. Évolution = 7 - 4 = +3. Selon cette définition, la page a gagné 3 positions vers le début de l’échantillon.

Q2 utilise la même page exacte et le même plafond de 10. S1 observe la position 2. S2 est dans l’état not_seen_within_cap pour un plafond de 10. La nouvelle position est inconnue. L’évolution est inconnue. N’enregistrez pas 11. La page pourrait être classée au-delà de 10. Vous ne connaissez pas cette position plus éloignée.

Q3 utilise la même page exacte. La position et l’heure de S1 n’ont pas été fournies, donc S1 reste inconnu. S2 est dans l’état source_failed. La comparaison est indisponible. Il ne s’agit pas d’une perte de position. L’échec signifie que le nouvel échantillon n’a pas été collecté.

Q4 est 1 relevé de domaine, et non une paire de relevés permettant de mesurer une évolution. 2 pages acceptées du domaine occupent les positions naturelles 3 et 8. Si la cible est le domaine, la meilleure position observée est 3. Si la cible est la page exacte du guide, cette page peut occuper la position 8. Une autre page du domaine peut occuper la position 3 au même moment. Précisez la définition que vous utilisez. Ne présentez pas 3 comme la position de la page exacte.

| Requête | Règle de cible | État de S1 | État de S2 | Évolution | Conclusion justifiée |
| --- | --- | --- | --- | --- | --- |
| Q1 | Page exacte https://garden.example/guide | observed_rank 7 | observed_rank 4 | 7 - 4 = +3 | Paire de positions connues dans des échantillons équivalents limités aux 10 premiers résultats |
| Q2 | Page exacte, plafond de 10 | observed_rank 2 | not_seen_within_cap 10 | inconnue | Ni une position de 11, ni une évolution de 2 - 11 |
| Q3 | Page exacte | inconnu | source_failed | inconnue | Comparaison indisponible, et non une perte de position |
| Q4 | Domaine garden.example, ou page exacte du guide | 1 relevé : positions acceptées 3 et 8 | Même relevé, pas un second moment d’observation | aucune | La position minimale du domaine est 3. La page exacte du guide peut être en position 8 |

Quelqu’un pourrait inventer une position de 11 pour Q2. Cette personne pourrait ensuite calculer 2 - 11 = -9. Ce -9 n’est pas une observation. Faire la moyenne du +3 de Q1 et de ce faux -9 produit une synthèse fausse. Présentez d’abord la paire de positions connues. Présentez l’absence limitée à l’échantillon. Présentez l’échec de la source. Excluez les états inconnus de toute moyenne.

Ces valeurs S1 et S2 sont des états de registre utilisés pour cette leçon. Ce ne sont pas des champs de position natifs du test de contrôle. Ce test de contrôle a enregistré uniquement les positions 1 et 2. Il n’a pas mesuré d’évolution.

## Prochaine action

Enregistrez 1 relevé Bing avec votre requête exacte, le pays, la langue, le réglage safeSearch, le réglage des résultats sponsorisés et le plafond de résultats. Notez 1 état valide de la cible : position observée, cible non vue dans la limite du plafond, échec de la source ou cible non identifiée avec certitude. Partez de l’Actor [Google Search Scraper](https://apify.com/chronometrica/google-search-scraper) et de la Task actuelle [Keyword Search Rank Snapshot](https://apify.com/chronometrica/google-search-scraper/examples/keyword-rank-snapshot). Modifiez cette Task pour utiliser 1 requête et engines ["bing"] avant toute comparaison.

## Sources et lectures complémentaires

- [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/)