Aller au contenu

Algorithmes Google

Twiddlers : comment Google retouche son classement

Un twiddler est une fonction qui reçoit une liste de résultats déjà classée et propose de la modifier. Ce que le guide interne de Google en dit, et ce qu’un recensement des attributs de la fuite d’avril 2024 permet de mesurer.

Un document interne de Google, exporté le 3 juillet 2018, définit le twiddler comme « un objet C++ qui formule des recommandations de classement, à partir d’une réponse de recherche provisoire issue d’un seul corpus » : il agit après le classement, sur une liste déjà ordonnée. Ce même document indique « plus de 65 » twiddlers actifs dans un seul module de production, et un recensement des attributs de la documentation interne fuitée en avril 2024, produit pour cet article, en trouve 84 dont le nom contient l’un des six motifs de boost, de rétrogradation ou de reclassement retenus, sur 14 050 attributs — deux ordres de grandeur, pas un inventaire. Ce qui n’est publié nulle part : la liste actuelle, les pondérations, et l’ordre dans lequel ces retouches s’appliquent.

Un twiddler ne classe pas, il retouche

Le mot ne vient pas du vocabulaire SEO. C’est un terme d’ingénierie interne : to twiddle, en anglais, c’est tripoter un bouton. Un twiddler est une fonction qui reçoit une liste de résultats déjà classée et propose de la modifier.

La distinction avec le classement lui-même est écrite noir sur blanc : « Twiddling differs from Ascorer ranking in that twiddlers act on a ranked sequence of results, rather than results in isolation. » (le twiddling diffère du classement par l’Ascorer en ceci que les twiddlers agissent sur une séquence de résultats déjà classée, et non sur des résultats isolés). L’Ascorer est le composant qui note chaque page indépendamment des autres. Le twiddler, lui, voit la liste — donc il peut raisonner sur le voisinage : trop de résultats du même site, pas assez de contenu récent, une page officielle qui devrait être en tête. C’est la différence entre noter des copies une par une et rendre un classement de promotion.

Le document nomme aussi l’endroit : « The twiddler framework is the part of Superroot responsible for re-ranking of results from a single corpus. » (le cadre applicatif des twiddlers est la partie de Superroot chargée du reclassement des résultats issus d’un seul corpus). Superroot reçoit la liste longue et rend la page de résultats courte ; un corpus est un stock de documents d’un même type — le web, les images, les actualités. Le système NavBoost, qui exploite les signaux de clic, est l’un de ces twiddlers : le plus commenté, mais un cas particulier de la couche décrite ici.

Predoc et lazy : deux moments, deux niveaux d’information

Le document distingue deux familles, et cette distinction explique la plupart des comportements observables. Elles se différencient par ce qu’elles voient : le docinfo, c’est-à-dire les données attachées à chaque page — extrait affiché, titre, signaux de qualité —, coûte cher à charger, donc tout le monde n’y a pas droit.

Les predoc passent tôt : « Predoc twiddlers run on thin responses, which typically have several hundred results that don’t contain any docinfo. » (les twiddlers predoc s’exécutent sur des réponses « maigres », qui contiennent typiquement plusieurs centaines de résultats dépourvus de toute information de document). Beaucoup de résultats, presque rien sur chacun.

Les lazy passent tard : « lazy twiddlers run on monotonically increasing ranges of fat results (which have snippets and other docinfo data). » (les twiddlers « paresseux » s’exécutent sur des plages croissantes de résultats « gras », qui disposent d’extraits et d’autres données de document). Peu de résultats, mais en détail.

Conséquence écrite dans le document : une contrainte qui remonte un résultat « may only be applied by predoc twiddlers, otherwise we would run into pagination bugs » (ne peut être appliquée que par des twiddlers predoc, faute de quoi nous aurions des bugs de pagination). Remonter une page après avoir découpé la liste en pages casse la pagination.

Predoc et lazy : deux étages de retouche La liste classée par l’Ascorer traverse d’abord les twiddlers predoc, qui voient plusieurs centaines de résultats sans détail et sont les seuls à pouvoir remonter un résultat, puis les twiddlers lazy, qui voient peu de résultats mais avec leurs extraits, avant le placement final dans la page de résultats. Ascorer Liste classée plusieurs centaines Twiddlers predoc plusieurs centaines de résultats aucun docinfo : ni extrait, ni détail peuvent remonter un résultat seuls à porter max_position Twiddlers lazy plages croissantes, peu de résultats avec docinfo : extraits et signaux jugent sur pièces ne peuvent pas remonter Page 10 résultats Pourquoi cette asymétrie Charger le docinfo de plusieurs centaines de résultats coûte cher. Les twiddlers predoc s’en passent et voient donc toute la liste ; les twiddlers lazy l’obtiennent, mais seulement sur une plage étroite. Remonter un résultat après le découpage en pages provoquerait des bugs de pagination : le document réserve donc cette action aux twiddlers predoc, qui passent avant ce découpage. Schéma de principe, sans échelle. Les libellés reprennent le vocabulaire du guide interne de 2018.
Les deux étages de retouche décrits par le guide interne de 2018. Schéma de principe, sans échelle : les libellés reprennent le vocabulaire du document, mais le nombre de résultats et l’ordre des étapes sont illustratifs. La règle de droite — seuls les twiddlers predoc peuvent remonter un résultat — est celle que le document justifie par les bugs de pagination.

Les actions : multiplier un score, déplacer, filtrer, annoter

Le document liste onze méthodes. Cinq suffisent à comprendre la mécanique.

  • Boost : « The call instructs the framework to multiply the IR score of the result by boost. » (l’appel demande au cadre applicatif de multiplier le score IR du résultat par le facteur de boost). Le score IRinformation retrieval, recherche d’information — est la note de pertinence calculée en amont. Le twiddler ne la recalcule pas : il la multiplie.
  • BoostAboveResult : faire en sorte qu’un résultat A se classe au-dessus d’un résultat B. Une position relative, pas une note.
  • Filter : « Filter logically removes a result from the response. » (le filtre retire logiquement un résultat de la réponse).
  • Hide : décrite comme « a specialized method mostly used to implement legal removals » (une méthode spécialisée, surtout utilisée pour les retraits d’ordre légal).
  • AnnotateResult : ajouter des messages au résultat sans toucher au classement — donc modifier l’affichage, pas l’ordre.

S’y ajoute SetRelativeOrder, qui impose l’ordre de deux résultats et que le document réserve à des circonstances exceptionnelles.

Les cinq actions d’un twiddler Cinq actions décrites par le guide interne : Boost multiplie le score de pertinence, BoostAboveResult impose une position relative, Filter et Hide retirent un résultat, AnnotateResult n’ajoute qu’un message sans changer l’ordre. Méthode Ce qu’elle change Effet sur la liste Boost Multiplie le score de pertinence déjà calculé un facteur, pas une note nouvelle × BoostAboveResult Impose qu’un résultat passe devant un autre une position relative, pas une note Filter Retire logiquement le résultat de la réponse il ne sera pas affiché Hide Retrait spécialisé, surtout pour les retraits légaux même effet visible, une autre raison AnnotateResult Ajoute un message au résultat l’ordre ne bouge pas, l’affichage oui Le guide interne liste onze méthodes ; les cinq ci-dessus suffisent à comprendre la mécanique. Schéma de principe.
Les cinq méthodes suffisantes pour comprendre la mécanique, sur les onze que liste le guide interne. Schéma de principe : les barres figurent des résultats, leur longueur n’a pas de valeur numérique.

Les contraintes de catégorie : la mécanique la moins connue

C’est la partie que la vulgarisation saute presque toujours, et la plus explicative. Un twiddler peut ranger des résultats dans une catégorie, puis poser une contrainte sur cette catégorie. Le verbe employé par le document est to pack : « placer » un résultat, c’est le retenir dans la page finale.

Contrainte Ce que dit le document Exemple nommé dans le document
max_total = N « Prevents more than N results in a category being packed. » (empêche que plus de N résultats d’une catégorie soient retenus) BlogCategorizer, pour limiter les résultats issus d’un même blog
min_position = N « Prevents results being packed earlier than the Nth rank. » (empêche qu’un résultat soit retenu avant le rang N) BadURLsCategorizer, sur les résultats marqués pour rétrogradation
max_position = N « Prevents results from being packed later than the Nth rank. » (empêche qu’un résultat soit retenu après le rang N) OfficialPageTwiddler, avec max_position = 0 sur la page officielle
stride_step, stride_factor un espacement minimal entre résultats consécutifs ; le document nomme les deux paramètres sans donner de valeurs ImageHostCategorizer, « to prevent too many images from the same host being clustered together » (pour éviter que trop d’images du même hôte se retrouvent groupées)

Un avertissement figure dans le texte source : « max_position constraints should be used with care, since they will override any demotions that another twiddler may wish to apply. » (les contraintes de position maximale sont à manier avec précaution, car elles annulent toute rétrogradation qu’un autre twiddler voudrait appliquer). Et à propos d’un cas particulier — les catégories de fusion utilisées pour les méga-liens de site —, le document lâche : « If you think you understand how they work, trust us: you don’t. We’re not sure that we do either. » (si vous pensez comprendre comment elles fonctionnent, croyez-nous : ce n’est pas le cas. Nous n’en sommes pas certains non plus). La phrase ne porte que sur ce cas-là, mais elle est écrite par des ingénieurs de Google, pour des ingénieurs de Google.

Les trois contraintes de placement Sur une colonne de rangs, max_position force un résultat à ne pas descendre plus bas qu’un rang donné, min_position empêche un résultat d’apparaître avant un rang donné, et max_total limite le nombre de résultats d’une même catégorie retenus dans la page. Rang 0 1 2 3 4 20 max_position = 0 le résultat ne peut pas descendre sous ce trait exemple du document : la page officielle d’une requête min_position = 20 le résultat ne peut pas remonter au-dessus du trait exemple du document : les URL marquées pour rétrogradation max_total = 2 au plus deux résultats d’une même catégorie sont retenus dans la page les suivants sont écartés du placement, quel que soit leur score Les trois contraintes ne changent aucun score : elles décident de l’endroit où un résultat a le droit d’être retenu. C’est pourquoi une page peut se déplacer sans que rien n’ait changé sur elle. Schéma de principe, sans échelle. Les valeurs 0, 2 et 20 sont des exemples : le document nomme les paramètres, et ne donne de valeur que pour max_position = 0.
Les trois contraintes de placement décrites par le guide interne. Schéma de principe, sans échelle : les valeurs 0, 2 et 20 sont illustratives — seule max_position = 0 figure comme valeur dans le document, dans l’exemple de la page officielle.

Ce que Google en dit publiquement, sans employer le mot

Le mot « twiddler » n’apparaît pas dans le guide officiel des systèmes de classement, dans sa version du 10 décembre 2025. Les effets, eux, y sont décrits : « Our site diversity system works so that we generally won’t show more than two web page listings from the same site in our top results, so that no single site tends to dominate all the top results. » (notre système de diversité de sites fait que nous n’affichons généralement pas plus de deux pages d’un même site dans nos premiers résultats, afin qu’aucun site ne domine à lui seul les premières places). Tout se passe comme si une contrainte max_total était posée sur une catégorie « site » — le rapprochement est une déduction, la page publique ne nomme aucun mécanisme. Même chose pour les systèmes de fraîcheur et les rétrogradations liées aux retraits de contenu : des effets documentés, un mécanisme jamais nommé — le même écart que celui relevé sur les contradictions d’AI Overviews.

Et la mesure ne suit pas tout à fait la documentation. Une analyse de Searchmetrics de juin 2019, sur le top 10 organique avant et après le déploiement du « site diversity update », relevait que trois URL d’un même domaine apparaissaient encore pour « 3.5% of keywords » (3,5 % des mots-clés), contre 6,7 % avant. La limite de deux est donc une règle générale avec des exceptions mesurables — ce que l’adverbe « generally » autorise. Réserves : un seul prestataire, son propre jeu de mots-clés, le top 10 seulement, et une mise à jour déployée en même temps qu’une core update, ce qui interdit d’attribuer toute la baisse à la seule diversité.

D’où vient ce qu’on sait : trois documents, trois fiabilités

Source Date Ce qu’elle prouve Limite
Guide interne « Twiddler Quick Start Guide — Superroot » exporté le 3 juillet 2018 Le vocabulaire, les familles, les actions, les contraintes Son propre bandeau indique « Review outdated · Reviewed by smunteanu on 2017-11-30 · Updated 2018-01-26 » : le contenu était déjà signalé comme périmé à l’export
Pièces du procès United States v. Google 2023-2025 L’existence et le poids de systèmes de reclassement, sous serment Les auditions de Pandu Nayak (31 janvier 2025) et HJ Kim (18 février 2025) confirment l’usage de twiddlers sans décrire le cadre applicatif
Documentation de l’API ContentWarehouse avril 2024 Les noms des champs de données et leurs descriptions courtes Des structures de données, jamais le code ni les pondérations

Le point de méthode compte plus que la liste : le seul document qui explique la mécanique est aussi le plus ancien des trois, et il se déclarait déjà périmé.

Ce que la fuite laisse voir : 84 attributs sur 14 050

Le décompte ci-dessous a été produit pour cet article, à partir du miroir public de la bibliothèque cliente ContentWarehouse — le code que Google génère automatiquement à partir de ses schémas de données, resté accessible quelques semaines. Chaque instantané est identifié par son empreinte de dépôt, pour être rejouable.

Instantané Empreinte Modules Attributs Correspondances
27 mars 2024 3bbe9aea 2 593 13 868 77
16 avril 2024 30030fba 2 595 14 050 84
7 mai 2024, expurgé ecfc6bb2 174 594 0

Une correspondance est un nom d’attribut contenant, sans distinction de casse, boost, demot, penalt, promot, rerank ou twiddl : 0,598 % des attributs, sur 36 modules. La dernière ligne sert de témoin — l’instantané expurgé, publié après le retrait des fichiers, n’en contient aucun.

Trois des 84 sont des faux positifs (adaboostImageFeaturePorn et ses deux variantes de version, où « boost » désigne l’algorithme d’apprentissage AdaBoost) : le décompte après examen manuel est de 81. Ce tri manuel n’a été appliqué qu’à l’instantané d’avril ; les 77 de mars contiennent vraisemblablement les mêmes faux positifs, et ne doivent donc être comparés qu’au 84 brut.

Répartition des 84 correspondances par motif Sur l’instantané du 16 avril 2024, 49 attributs contiennent boost, 19 contiennent demot, 8 promot, 5 penalt, 2 rerank et 1 twiddl. L’instantané expurgé du 7 mai 2024 n’en contient aucun. Instantané du 16 avril 2024 — 84 correspondances sur 14 050 attributs boost 49 demot 19 promot 8 penalt 5 rerank 2 twiddl 1 Un seul nom d’attribut contient « twiddler ». Le mot apparaît 20 fois dans les commentaires, répartis sur 9 modules. Témoin instantané expurgé du 7 mai 2024, après retrait des fichiers 0 correspondance sur 594 attributs Décompte produit pour cet article. Trois des 84 sont des faux positifs (AdaBoost) : 81 après examen manuel.
Répartition des 84 correspondances par motif, sur l’instantané du 16 avril 2024 de la bibliothèque cliente ContentWarehouse (empreinte 30030fba). Valeurs mesurées, non illustratives. Trois des 84 sont des faux positifs — adaboostImageFeaturePorn et ses deux variantes de version, où « boost » désigne l’algorithme d’apprentissage AdaBoost : 81 après examen manuel. La ligne « témoin » est l’instantané expurgé publié après le retrait des fichiers.

Deux résultats méritent d’être relevés. Un seul nom d’attribut contient « twiddler », qualityTwiddlerDomainClassification ; le mot apparaît en revanche 20 fois dans les commentaires de la documentation, sur 9 modules — il vit dans les descriptions, pas dans les noms de champs. Et la description du champ boost du module WWWResultInfoMinimalAestheticsAdjusterInfo dit « final boost = (all boosts) » : le boost final y est le produit de tous les boosts. Il s’agit d’un ajusteur d’affichage, pas du cadre applicatif décrit plus haut — mais la composition multiplicative y est la même que dans le « multiply the IR score* » de 2018, ce qui reste un rapprochement, pas une preuve.

Trois idées reçues

« Il y a plusieurs centaines de twiddlers en fonctionnement. » Le document écrit : « the twiddler framework supports hundreds of twiddlers (>65 are currently active in production in WebMixer alone) » (le cadre applicatif prend en charge des centaines de twiddlers ; plus de 65 sont actuellement actifs en production dans le seul WebMixer). WebMixer est le module qui assemble les résultats web. Le cadre en supporte des centaines ; 65 étaient actifs dans ce module, en 2018. La formulation courante confond une capacité et un état.

« La pénalité page 3 plafonne les pages spam au rang 31. » Le document ne donne aucun rang. Il décrit BadURLsCategorizer comme ajoutant « a pseudo random (but deterministic per-query) min_position constraint » (une contrainte de position minimale pseudo-aléatoire, mais déterministe pour une requête donnée), « pushing them off the first couple of pages » (les repoussant au-delà des deux premières pages). Pseudo-aléatoire et déterministe par requête : il n’y a pas de rang fixe à citer.

« Un twiddler peut faire remonter une page absente du classement. » Le document ne l’affirme ni ne l’infirme. Les actions portent sur « a ranked sequence of results », et aucune des onze méthodes listées n’insère un document absent — Filter et Hide ne font que retirer. La réponse prudente est une déduction, pas une citation.

Ce que ça change pour un site

  1. Une variation de quelques rangs sans modification de la page n’est pas forcément une sanction. Une contrainte de catégorie appliquée à la requête suffit à déplacer une page. Le suivi de position à la journée mesure autant ces retouches que le classement lui-même : ce sont les tendances sur plusieurs semaines qui portent une information.
  2. Deux pages d’un même site sur une requête sont un plafond par défaut, pas un objectif. Google a annoncé le 6 juin 2019 que ce plafond est révocable : « we may still show more than two in cases where our systems determine it’s especially relevant to do so for a particular search » (nous pouvons encore en afficher plus de deux lorsque nos systèmes jugent que c’est particulièrement pertinent pour une recherche donnée). Multiplier les pages sur une intention proche reste un mauvais pari : l’énergie est mieux placée sur le maillage interne, qui désigne la page à retenir.
  3. Le levier reste le signal, pas la retouche. Un twiddler lit des signaux calculés en amont — clics, fraîcheur, qualité, correspondance officielle. Aucun n’est réglable directement ; tous dépendent de ce que vaut la page au premier classement, second passage de classement compris. Les contraintes de catégorie font exception : elles s’appuient sur une propriété structurelle — l’hôte, le domaine — et non sur un signal de qualité. C’est exactement ce que dit le point précédent.

Documenté, déduit, non documenté

Affirmation Statut Base
Un twiddler est « un objet C++ qui formule des recommandations de classement » Documenté Guide interne, export du 3 juillet 2018
Le cadre applicatif est « la partie de Superroot chargée du reclassement » Documenté Guide interne
Les twiddlers agissent sur une séquence déjà classée, pas sur des résultats isolés Documenté Guide interne
Deux familles existent : predoc et lazy Documenté Guide interne
Boost multiplie le score IR du résultat Documenté Guide interne, méthode Boost
max_position ne peut être appliqué que par un twiddler predoc Documenté Guide interne
Le cadre applicatif « supporte » des centaines de twiddlers Documenté Guide interne
Plus de 65 twiddlers étaient actifs dans WebMixer Documenté, daté de 2018 Guide interne ; chiffre repris par RESONEO, 31 octobre 2024
Le guide interne se déclarait périmé dès son export Documenté Bandeau « Review outdated · Updated 2018-01-26 »
« Plusieurs centaines de twiddlers sont en fonctionnement » Faux tel quel Confusion entre capacité et état ; le document distingue les deux
Les pages rétrogradées sont plafonnées au rang 31 Faux Le document décrit une contrainte pseudo-aléatoire, sans rang
Google n’affiche « généralement pas plus de deux » pages d’un même site Documenté Guide officiel des systèmes de classement, 10 décembre 2025
Ce plafond est levé « when our systems determine it’s especially relevant » (quand nos systèmes jugent que c’est particulièrement pertinent) Documenté Annonce Google du 6 juin 2019
La diversité de sites est mise en œuvre par une contrainte max_total Déduit Le guide public ne nomme aucun mécanisme
Trois URL d’un même domaine apparaissaient encore pour 3,5 % des mots-clés Observé, non documenté par l’éditeur Searchmetrics, juin 2019, top 10, jeu de mots-clés propriétaire
Le mot « twiddler » est absent du guide public des systèmes de classement Non documenté Vérifié sur cette page ; le reste du site n’a pas été passé en revue
84 attributs sur 14 050 portent l’un des six motifs retenus Mesuré ici Instantané 30030fba du 16 avril 2024
81 après retrait des trois faux positifs adaboost Mesuré ici Examen manuel, appliqué au seul instantané d’avril
Un seul nom d’attribut contient « twiddler » ; le mot apparaît 20 fois en commentaire Mesuré ici Même instantané, 9 modules concernés
Le champ boost d’un ajusteur d’affichage est le produit de tous les boosts Documenté pour ce champ Description du champ dans WWWResultInfoMinimalAestheticsAdjusterInfo
Ce champ et la méthode Boost relèvent de la même mécanique Déduit Deux sous-systèmes distincts ; seule la composition est analogue
Un twiddler ne peut pas ajouter un document absent de la réponse Déduit Aucune des onze méthodes listées n’insère un document
La liste actuelle des twiddlers, leurs pondérations, leur ordre d’application Non documenté Aucune source publique
L’application de ces mécanismes aux réponses d’AI Overviews et d’AI Mode Non documenté Aucune source publique n’établit le lien

À retenir

  • Un twiddler retouche, il ne classe pas. Il reçoit une liste déjà ordonnée et propose de la modifier.
  • Boost multiplie un score existant. Une page sans score de départ n’a rien à multiplier.
  • Predoc voit large et flou, lazy voit étroit et net. Cette asymétrie interdit de remonter une page au dernier moment.
  • Les contraintes de catégorie expliquent plus de résultats que les boosts. Diversité de site, espacement par hôte, rétrogradations : des règles de placement, pas des notes.
  • Le vocabulaire est interne, les effets sont publics. Google décrit la diversité de sites et la fraîcheur sans jamais écrire « twiddler ».
  • La source principale se déclarait périmée en 2018. Tout ce qui en est tiré se lit avec cette date en tête.

Questions fréquentes

Un twiddler, est-ce la même chose qu’un facteur de classement ? Non. Un facteur de classement est un signal qui entre dans le calcul d’un score ; un twiddler est une fonction qui s’exécute après ce calcul et retouche le résultat. Le twiddler consomme des facteurs, il n’en est pas un.

Peut-on savoir quel twiddler a fait bouger une page ? Non, et rien ne permet de le déduire depuis l’extérieur. Plusieurs retouches s’appliquent en série, et quand deux d’entre elles veulent promouvoir le même résultat, le document précise que « the strongest promotion is chosen » (la promotion la plus forte l’emporte) — les contributions individuelles disparaissent donc du résultat observable, qui n’est qu’une position finale.

Ces mécanismes s’appliquent-ils aux réponses générées par IA ? Aucune source publique ne l’établit. Le guide de 2018 décrit la recherche web classique ; étendre le raisonnement aux AI Overviews serait une déduction sans appui, et elle est classée comme telle dans le tableau ci-dessus.

Sources

  • Guide interne « Twiddler Quick Start Guide — Superroot », export du 3 juillet 2018, document divulgué — copie publique sur zachvorhies.com
  • Google, « A Guide to Google Search Ranking Systems », mise à jour du 10 décembre 2025 — developers.google.com
  • Barry Schwartz, « Google search update aims to show more diverse results from different domain names », 6 juin 2019 — searchengineland.com
  • Mario Fischer, « How Google Search ranking works », 13 août 2024 — searchengineland.com
  • Danny Goodwin, « The ABCs of Google ranking signals: What top search engineers revealed », 13 mai 2025 — searchengineland.com
  • Olivier de Segonzac, « Google leak — Part 2: Understanding the Twiddler Framework », 31 octobre 2024 — resoneo.com
  • Malte Landwehr, « Site Diversity Update Analysis », juin 2019 — searchmetrics.com
  • Documentation de l’API ContentWarehouse, miroir public de la bibliothèque cliente Elixir, instantanés 3bbe9aea, 30030fba et ecfc6bb2github.com

Grégory Florin

Expert SEO et auteur sur learnSEO.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *