Si vous avez vous aussi enfilé vos habits de chercheur d’or de l’API de Google, on pourrait avancer plus vite en se partageant le boulot d’investigation et d’interprétation. Pour collaborer, contactez-moi.

Analyse du module GoogleApi.ContentWarehouse.V1.Model.CompressedQualitySignals

Analyse du module CompressedQualitySignals
0
(0)

Qu’est-ce que les CompressedQualitySignals ?

Grâce à la fuite de documents de l’API de Google lors de la Google Leak de 2024, on sait qu’il existe dans cet API un module intitulé CompressedQualitySignals, c’est-à-dire Signaux de qualité compressés.

Les modules liés à l’évaluation de la qualité des sites et des pages

D’autres modules ont le terme Quality dans leur intitulé :

  • QualityNsrNsrData, à propos duquel mon investigation a conclu que NSR signifie probablement Normalized Site Rank, et qu’il s’agit donc de paramètres évaluant la qualité globale d’un site
  • QualityNsrPQData, à propos duquel on peut penser que PQ signifie PageQuality et qu’il s’agit de paramètres évaluant la qualité d’une page web

De là, on peut déjà supposer que le module CompressedQualitySignals ferait une synthèse de ces éléments concernant le site et telle page web.

Le fait que l’info soit compressée, suggère qu’elle est ainsi compactée pour être servie, et donc qu’elle serait utilisée directement pour déterminer le classement lors d’une recherche.

Contexte : les divers systèmes de classement et reclassement de Google

Les documents de la Google Leak nous apprennent par ailleurs que Google a plusieurs systèmes pour effectuer le classement :

  • ces modules d’évaluation de la qualité s’exécuteraient dans un premier temps – en gros, cela consiste en une analyse sémantique et technique des pages et des sites
  • puis dans un deuxième temps, des « Twiddlers« , des modificateurs, au premier rang desquels un système nommé NavBoost, viendraient analyser le comportement des utilisateurs sur les pages de résultats de Google, et sur les pages web auxquels ces résultats renvoient, pour moduler le classement.

Analyse détaillée du module CompressedQualitySignals

Le code du module est disponible ici.

Je vais citer le document original puis le traduire et le commenter (je vais par contre éliminer les attributs notés comme obsolètes, pour alléger mon commentaire).

Il commence sur ce commentaire :

A message containing per doc signals that are compressed and included in Mustang and TeraGoogle. For TeraGoogle, this message is included in perdocdata which means it can be used in preliminary scoring. CAREFUL: For TeraGoogle, this data resides in very limited serving memory (Flash storage) for a huge number of documents. Next id: 43

Traduction : Un message contenant des signaux par document qui sont compressés et inclus dans Mustang et TeraGoogle. Pour TeraGoogle, ce message est inclus dans perdocdata, ce qui signifie qu’il peut être utilisé dans la notation préliminaire. ATTENTION : Pour TeraGoogle, ces données résident dans une mémoire de service très limitée (stockage Flash) pour un grand nombre de documents. Id suivant : 43

Grâce à ce commentaire, on comprend déjà un peu mieux la nature de ce module. Il s’agit de « signaux par document« . J’imagine que par « document« , il faut comprendre page web – ou le contenu spécifique à cette page web qui en est extrait (en effet on peut considérer que des éléments comme le logo du site, le menu, le pied de page etc, ne font pas vraiment partie du contenu propre d’une page web).

On comprend aussi à quoi sert ce module : à inclure ces signaux « dans Mustang et TeraGoogle« . Je n’ai pas encore eu le temps d’investiguer sur ces termes mais je crois comprendre qu’il s’agit de systèmes d’indexation de Google. En effet l’indexation se fait de manières différentes en fonction des types de média (texte, image, vidéo etc) et en fonction du stade où en est l’indexation de tel contenu (s’il s’agit d’une découverte d’une url par Google bot, ou d’une nouvelle exploration après mise à jour de la page par son auteur).

Le document de l’API Google liste ensuite une longue liste d’attributs. On va les analyser un par un.

ugcDiscussionEffortScore (type: integer(), default: nil) – UGC page quality signals. (Times 1000 and floored)

UGC, c’est le user-generated content, le contenu généré par l’utilisateur : les commentaires, les posts des réseaux sociaux, et autres traces d’une interaction entre une page et son public.

Donc ugcDiscussionEffortScore signifie Score d’effort de discussion générée par l’utilisateur.

Cela signifie que Google tient compte de la qualité des débats notamment dans les commentaires : une page avec 50 commentaires vides de sens et remplis de spam ne vaut pas autant qu’une page avec 10 commentaires d’une discussion passionnée.

Je suis tenté d’en conclure qu’il faut favoriser les discussions intéressantes, et éliminer le spam.

productReviewPPromotePage (type: integer(), default: nil) –

L’intitulé de cet attribut a l’air transparent mais le fait qu’on ne puisse pas deviner ce que signifie le « P » isolé rend sa compréhension plus délicate. En tout cas, il est question d’un type d’article (productReview)qui passe en revue un produit (j’imagine que ça peut aussi concerner un service).

experimentalQstarDeltaSignal (type: number(), default: nil) – This field is not propagated to shards. It is meant to be populated at serving time using one of the versions present in the experimental_nsr_team_wsj_data field above (using the ExperimentalNsrTeamDataOverridesParams opti to populate it; see http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). The purpose of this field is to be read by an experimental Q* component, in order to quickly run LEs with new delta components. See go/0DayLEs for details.

Traduction : Ce champ n’est pas répercuté dans les unités de stockage. Il est destiné à être rempli au moment du service en utilisant l’une des versions présentes dans le champ experimental_nsr_team_wsj_data ci-dessus (en utilisant l’opti ExperimentalNsrTeamDataOverridesParams pour le remplir ; voir http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). Ce champ est destiné à être lu par un composant Q* expérimental, afin d’exécuter rapidement des LE avec de nouvelles composantes delta. Voir go/0DayLEs pour plus de détails.

Ici, la tambouille de Google s’avère fort difficile à interpréter. On apprend néanmoins que Google peut faire des expériences de classement – pour tester de nouveaux réglages, ou faire du A/B testing comparatif entre des réglages, pour évaluer la qualité des résultats de recherche.

productReviewPDemoteSite (type: integer(), default: nil) – Product review demotion/promotion confidences. (Times 1000 and floored)

On retrouve ici la mystérieuse lettre P isolée. Il s’agit à nouveau de productReview, et cette fois il est question de DemoteSite, de déclassement à l’échelle de tout un site.

Le commentaire de l’attribut nous laisse comprendre qu’il s’agit à la fois de demotion et de promotion, c’est-à-dire de classement en mieux ou en moins bien, ce qui m’amène à réinterpréter l’attribut productReviewPPromotePage.

En effet, on a là productReviewPDemoteSite et productReviewPPromotePage, un attribut qui déclasse au niveau du site et un autre qui classe mieux et s’applique à la page.

experimentalQstarSiteSignal (type: number(), default: nil) – This field is not propagated to shards. It is meant to be populated at serving time using one of the versions present in the experimental_nsr_team_wsj_data field above (using the ExperimentalNsrTeamDataOverridesParams opti to populate it; see http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). The purpose of this field is to be read by an experimental Q* component, in order to quickly run LEs with new site components. See go/0DayLEs for details.

Traduction : Ce champ n’est pas propagé dans les unités de stockage. Il est destiné à être rempli au moment du service en utilisant l’une des versions présentes dans le champ experimental_nsr_team_wsj_data ci-dessus (en utilisant l’option ExperimentalNsrTeamDataOverridesParams pour le remplir ; voir http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). Le but de ce champ est d’être lu par un composant Q* expérimental, afin d’exécuter rapidement des LE avec de nouveaux composants de site. Voir go/0DayLEs pour plus de détails.

On a là un attribut étroitement lié à l’attribut rencontré ci-dessus, experimentalQstarDeltaSignal. On a donc un DeltaSignal et un SiteSignal.

exactMatchDomainDemotion (type: integer(), default: nil) – Page quality signals converted from fields in proto QualityBoost in quality/q2/proto/quality-boost.proto. To save indexing space, we convert the float values in [0, 1] to integers in range [0, 1023] (use 10 bits). exact_match_domain_demotion: converted from QualityBoost.emd.boost.

Traduction : Signaux de qualité de page convertis à partir des champs du proto QualityBoost dans quality/q2/proto/quality-boost.proto. Pour économiser de l’espace d’indexation, nous convertissons les valeurs flottantes dans [0, 1] en entiers dans l’intervalle [0, 1023] (utiliser 10 bits). exact_match_domain_demotion : converti à partir de QualityBoost.emd.boost.

L’EMD ou exact-match domain est un terme bien connu en SEO. Il s’agit de choisir un nom de domaine qui correspond exactement à un mot-clé sur lequel on cherche à capter du trafic, en utilisant la tendance de Google à faire correspondre (to match) les mots-clés des requêtes et ceux des noms de site. Or, Google y voit une tentative de fraude. Cet attribut nous prouve donc que Google s’efforce d’inactiver la stratégie EMD.

lowQuality (type: integer(), default: nil) – S2V low quality score: converted from quality_nsr.NsrData, applied in Qstar. See quality_nsr::util::ConvertNsrDataToLowQuality.

Cet attribut se lit, littéralement, basseQualité. Le commentaire précise qu’il s’agit d’un « score de basse qualité S2V, converti depuis quality_nsr.NsrData ». Même si cela sonne comme du charabia, je pense avoir une idée de ce que cela veut dire.

S2V signifie probablement site to vectors : en bref, c’est une technique pour compacter l’information d’un site web en une suite de chiffres analysables et comparables. Google l’utilise probablement non seulement pour savoir de quoi parle un site, quel est son « cœur thématique », mais aussi pour combattre le plagiat et la duplication de contenus.

Par ailleurs, quality_nsr.NsrData désigne probablement les signaux de « qualité du rang de site normalisé ».

Bref, il semble bien que cet attribut donne un score de faible qualité à l’échelle de tout un site web.

Conséquence probable : si la moitié de votre site est de mauvaise qualité, elle plombe probablement les résultats de votre meilleure moitié. Vous pourriez donc gagner du trafic en éliminant les mauvais contenus.

navDemotion (type: integer(), default: nil) – nav_demotion: converted from QualityBoost.nav_demoted.boost.

Je pense comprendre ce que signifie navDemotion : en relation avec NavBoost, Google déclasse des pages web si le comportement des utilisateurs indique qu’ils ne l’apprécient guère.

Par exemple, titre putaclic puis contenu décevant = votre CTR haut vous fera monter, mais votre dwell time et votre faible taux de clic sur le site vous fera chuter.

pqData (type: integer(), default: nil) – Encoded page-level PQ signals.

Il s’agit d’après moi d’une mesure de la qualité de la page, littéralement on traduirait « données de qualité de page ».

siteAuthority (type: integer(), default: nil) – site_authority: converted from quality_nsr.SiteAuthority, applied in Qstar.

Le nom a l’air transparent : autorité de site. Le commentaire nous indique qu’il est « appliqué dans Qstar », un terme qu’on croise souvent, où le Q est probablement l’initiale de Quality.

Google a donc une mesure de l’autorité de site, mais cet attribut n’indique en rien comment il est calculé : dépend-il, comme le concept d’autorité de domaine, de la force et du nombre des liens entrants (backlinks) ?

crapsNewUrlSignals (type: String.t, default: nil) – For craps[url|pattern]_signals, please avoid accessing these fields directly, even in minor ways like checking has_craps*. Instead, please use methods from quality/navboost/craps/craps-lossy-compression.h or talk to craps-team@.

Il parait qu’un ex-employé de Google nommé Pedro Dias a dit que craps serait l’acronyme de « Clicks and Results Prediction System », donc « système de prédiction des clics et des résultats ».

C’est l’essence même de Google depuis qu’il s’est transformé en IA : s’adapter à l’utilisateur et prédire la « liste de résultats » idéale, non seulement en fonction de la recherche et du web, mais de ses préférences, que Google peut connaître via son vaste système (largement abusif) d’acquisition de données personnelles, via Chrome, Android, Google Apps, etc etc. Dans ce contexte, la prédiction des clics signifierait que Google est capable de savoir sur quels résultats chacun va préférer cliquer, et de là, faire un classement en fonction de cette donnée.

Donc, crapsNewUrlSignals signifierait « nouveaux signaux d’url du système de prédiction des clics et résultats ».

babyPandaV2Demotion (type: integer(), default: nil) – New BabyPanda demotion, applied on top of Panda. This is meant to replace |baby_panda_demotion|.

Panda est un des algorithmes de Google qui s’occupe de déclasser et sanctionner les sites que Google juge de mauvaise qualité.

BabyPanda serait donc un autre système de déclassement – « appliqué par-dessus Panda » comme l’indique le commentaire.

authorityPromotion (type: integer(), default: nil) – authority promotion: converted from QualityBoost.authority.boost

Intéressant : Google un donc un attribut qui promeut en fonction de l’autorité – même si la définition exacte de ces termes reste à trouver.

productReviewPUhqPage (type: integer(), default: nil) – The possibility of a page being a high quality review page.

Le commentaire de cet attribut laisse penser que la mystérieuse lettre P des attributs précédents et de celui-ci, pourrait être l’initiale de Possibility ou Probability.

Cet attribut mesure concrètement la « possibilité qu’une page soit une page de revue ou test de produit de haute qualité ».

crapsAbsoluteHostSignals (type: integer(), default: nil) – Impressions, unsquashed, host level, not to be used with compressed ratios. Not to be used in Pattern Data.

Cet attribut sur les « signaux d’hôte absolus du système de prédiction des clics et des résultats » consiste comme l’indique le commentaire en les « impressions, non-écrasées » (écrasées signifie peut-être compressées ? ou peut-être, disqualifiées, considérées comme spam, inauthentiques ? (faux trafic, etc)).

productReviewPPromoteSite (type: integer(), default: nil) –

On a là le parent direct de productReviewPPromotePage.

babyPandaDemotion (type: integer(), default: nil) – baby_panda_demotion: converted from QualityBoost.rendered.boost.

Déjà commenté.

serpDemotion (type: integer(), default: nil) – serp demotion: applied in Qstar.

La SERP, c’est la search-engine result page, la page des résultats d’un moteur de recherche.

Cet attribut peut vouloir dire deux choses différentes : soit il indique de combien on doit déclasser une page sur les serps ; soit il indique que les infos concernant le comportement des utilisateurs sur les serps aboutissent à déclasser ce contenu.

anchorMismatchDemotion (type: integer(), default: nil) – anchor_mismatch_demotion: converted from QualityBoost.mismatched.boost.

Littéralement, il s’agit d’un déclassement causé par une non-correspondance d’ancre. L’ancre, c’est le texte d’un lien. Si on fait un lien sur le mot « plage » vers un site qui vend du CBD, il y a une fraude évidente, une non-correspondance entre le terme utilisé et sa cible. Donc Google le note, probablement pour déclasser la cible, ou la page qui publie cette ancre trompeuse, ou les deux ?

crapsNewHostSignals (type: String.t, default: nil) –

Encore ces « Clicks and Results Prediction System » ! J’ai déjà commenté la version crapsAbsoluteHostSignals et, en l’absence d’indications dans la doc, impossible d’aller plus loin.

experimentalQstarSignal (type: number(), default: nil) – This field is not propagated to shards. It is meant to be populated at serving time using one of the versions present in the experimental_nsr_team_wsj_data field above (using the ExperimentalNsrTeamDataOverridesParams opti to populate it; see http://source/search?q=ExperimentalNsrTeamDataOverridesParams%20file:ascorer.proto). The purpose of this field is to be read by an experimental Q* component, in order to quickly run LEs with new components. See go/0DayLEs for details.

On a déjà rencontré ces « signaux Qstar expérimentaux ».

topicEmbeddingsVersionedData (type: list(GoogleApi.ContentWarehouse.V1.Model.QualityAuthorityTopicEmbeddingsVersionedItem.t), default: nil) – Versioned TopicEmbeddings data to be populated later into superroot / used directly in scorers.

Comme dans la technique de la vectorisation sémantique, les embeddings ou incorporations sont un moyen de synthétiser de l’information, ici l’info relative à une thématique.

scamness (type: integer(), default: nil) – Scam model score. Used as one of the web page quality qstar signals. Value range from 0 to 1023.

A noter que Google utilise ici un néologisme : scamness n’est pas un vrai mot anglais. Il s’agirait donc de la « scamitude », scam signifiant arnaque, fraude – on pourrait dire la « fraudulosité ».

Le commentaire dit que c’est un score calculé par un « modèle » (comme les LLM, large-langage models), et qu’il est un des « signaux qstar de qualité de page web ».

crapsUnscaledIpPriorBadFraction (type: integer(), default: nil) –

Littéralement, « mauvaise fraction préalable non-échelonnée du système de prédiction des clics et des résultats ». Plus jargonneux tu meurs.

pandaDemotion (type: integer(), default: nil) – This is the encoding of Panda fields in the proto SiteQualityFeatures in quality/q2/proto/site_quality_features.proto. The encoding/decoding is performed using functions from quality_coati::coati_util.

Encore le déclassement panda.

unauthoritativeScore (type: integer(), default: nil) – Unauthoritative score. Used as one of the web page quality qstar signals.

Intéressant : une page peut donc avoir à la fois un unauthoritativeScore, un siteAuthority et un authorityPromotion.

L’unauthoritativeScore serait une mesure de la « non-autorité » d’une page – par exemple quand, en pleine pandémie, la moitié d’Internet devient spontanément experte en virologie ? bref, quand il y a un hiatus entre l’identité d’un auteur, d’un site, d’un hôte, et le thème qu’il traite ?

productReviewPReviewPage (type: integer(), default: nil) – Fields product_review_p_review_page and product_review_p_uhq_page are for promoting/demoting HQ/LQ review pages in NGS. See go/pr-boosts for details. The possibility of a page being a review page.

Le commentaire confirme que P est probablement la possibilité. Donc cet attribut exprime la possibilité que la page en question soit une page d’avis ou de test de produit.

pqDataProto (type: GoogleApi.ContentWarehouse.V1.Model.QualityNsrPQData.t, default: nil) – Stripped page-level signals, not present in the encoded field ‘pq_data’.

On retrouve le terme « proto » un peu partout dans la documentation Google. Il désigne peut-être un prototype ? Il s’agit ici d’un proto de données de qualité de page.

pairwiseqVersionedData (type: list(GoogleApi.ContentWarehouse.V1.Model.PairwiseQVersionedItem.t), default: nil) – Versioned PairwiseQ score to be used in continuous evaluation of the upcoming PairwiseQ versions and assess quality impact on various slices.

Aucune idée précise de ce que signifie ce sabir.

crapsNewPatternSignals (type: String.t, default: nil) –

Littéralement : « nouveaux signaux de schéma du système de prédiction des clics et des résultats ».

productReviewPDemotePage (type: integer(), default: nil) –

Encore la question des articles portant sur l’analyse d’un produit. Il est ici question de les déclasser.

Signification des CompressedQualitySignals

Après cette analyse, je pense être en état de fournir une meilleure description de ce que sont les CompressedQualitySignals.

Ils rassemblent une série de signaux de qualité – au niveau de la page web, je pense – , issus de différents systèmes :

  • certains cherchent à savoir si la page en question fait l’analyse d’un produit, et si oui quelle est sa qualité
  • certains prennent des infos de Panda et babyPanda pour savoir si la page est de mauvaise qualité
  • certains captent des signaux de type NavBoost, concernant le comportement des utilisateurs
  • d’autres enfin cherchent à savoir si la page contient diverses formes de fraude (dans l’url, les ancres, les liens, etc)

J’en sais trop peu pour l’instant pour conclure ceci et cela : je vais d’abord continuer l’investigation, chercher à développer une meilleure compréhension de l’ensemble, qui m’aidera à mieux comprendre les détails, et ensuite, je viendrais repenser et réécrire mes conclusions d’analyse.

Qu'avez-vous pensé de cet article ?

Cliquez sur une étoile pour donner votre avis

Avis moyen 0 / 5. Nombre d'avis donnés 0

Soyez le premier à donner votre avis

3 réflexions sur “Analyse du module GoogleApi.ContentWarehouse.V1.Model.CompressedQualitySignals”

  1. Avatar

    Bonjour Ludovic,
    merci pour tes articles très intéressants sur le leak Google !
    Comme toi apparemment, je passe du temps à essayer de comprendre les nombreux acronymes de la doc 😀
    Concernant CRAPS, il semblerait que l’ancien Google Pedro Dias ait tweeté (on dit Xé maintenant ?) l’info avant de la supprimer, et que cela correspondrait à « Clicks and Results Prediction System »…
    À prendre avec des pincettes bien sûr, comme toute info concernant ce leak ^^
    Bonne journée

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Besoin d’un hébergeur ?

Convivial, sympa, fiable, et pas cher,
O2Switch me semble être la meilleure offre actuellement sur le marché français.
C’est pourquoi j’y héberge tous mes sites.

Hébergement O2Switch
Hébergement O2Switch

Théories non-vérifiées, affirmations gratuites, croyances sans fondement :
saurez-vous remettre en cause votre approche du référencement ?

Panier
Retour en haut