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.PerDocData

0
(0)

Qu’est-ce que le module PerDocData ?

Le module PerDocData fait partie des documents qui ont fuité lors de la Google Leak de mai 2024.

Analyse du terme PerDocData dans les noms des modules

Le terme PerDocData apparait lui-même des dizaines de fois dans les noms des modules, le plus souvent en tant que suffixe d’un ou plusieurs autres termes :

BiasingPerDocData
BiasingPerDocData2
BiasingPerDocData2BiasingField
BiasingPerDocDataBiasingField
BlogPerDocData
BlogPerDocDataOutlinks
BookCitationPerDocData
CrowdingPerDocData
CrowdingPerDocDataNewsCluster
GroupsPerDocData
ImagePerDocData
ImageRepositoryAnimatedImagePerdocData
IndexingMobileVoltVoltPerDocData
KaltixPerDocData
MobilePerDocData
OceanPerDocData
PhilPerDocData
PremiumPerDocData
QualityFringeFringeQueryPriorPerDocData
QualityRichsnippetsAppsProtosLaunchableAppPerDocData
QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData
ShingleInfoPerDocData
ToolBarPerDocData
VideoPerDocData

Ce fait laisse penser que le concept de PerDocData a quelque chose de central, d’essentiel, puisqu’il se combine à d’autres concepts fondamentaux comme Blog, Image, Mobile, Quality, Video etc.

Si on le traduit littéralement, PerDocData signifie DonnéesParDoc.

Qu’entend Google par « Doc » ? On pense évidemment à « document« , et cette interprétation est confortée par des commentaires des attributs qui utilisent explicitement ce terme.

Donc oui, c’est sûr : Doc = document.

Que signifie « document » dans l’API de Google ?

Mais que signifie exactement « document » ? On peut penser d’abord au document HTML, qui est un peu la matière première de tout moteur de recherche.

Cependant quand on voit que les concepts d’image et de vidéo sont également associés au concept de PerDocData, on peut imaginer que le document désigne tout document existant en tant que fichier sur le web ; sauf qu’on ne trouve pas trace de document audio (ex : un fichier .mp3 intégré à une page web), ni même de document PDF ou autre document texte.

En réalité, Google semble avoir une notion particulière de ce concept de document. Dans le module BlogPerDocData, on trouve cet attribut :

isSyntacticReshare (type: boolean(), default: nil) – A syntactic reshare is a document that is created from an original and shared with friends and we detect this resharing property by syntactically parsing the doc. . For example, a retweet is an example of a syntactic_reshare because we can detect that it’s a reshare by grepping for « RT @ ».

On peut traduire ce texte ainsi :

isSyntacticReshare (type : boolean(), default : nil) – Un repartage syntaxique est un document qui est créé à partir d’un original et partagé avec des amis et nous détectons cette propriété de repartage en analysant syntaxiquement le document. Par exemple, un retweet est un exemple de repartage syntaxique car nous pouvons détecter qu’il s’agit d’un repartage en recherchant « RT @ ».

Dans cet exemple, ce que Google qualifie de document est un retweet – ce n’est donc ni une page web en entier, ni un fichier.

En conclusion, je dirais que ce que Google appelle un document, c’est :

  • un document HTML
  • ou une partie d’un document HTML, ayant par exemple un auteur différent (ex : un retweet ; ou peut-être un commentaire ?)
  • une image, en lien avec Google Images
  • une vidéo, en lien avec Google Vidéos

Par ailleurs, quand on regarde de plus près les modules qui contiennent le suffixe PerDocData, on s’aperçoit :

  • que le module VideoPerDocData n’a que 2 attributs, sans aucun commentaire : coreSignals, et frames
  • que le module ImagePerDocData n’a que 5 attributs, eux aussi très pauvres en commentaires : DEPRECATEDEntropyColor, filename, flags, height, width
  • que le module MobilePerDocData n’a que 3 attributs, dont 2 sont obsolètes : flags, mobileurl, transcodedPageScore
  • et d’autres modules contenant PerDocData comme suffixe ont des caractéristiques similaires : très peu d’attributs, aucun commentaire utile à la compréhension

Ce qui nous permet de supposer que PerDocData contient la liste des attributs communs à tous les types de documents !

Maintenant, entrons dans le vif du sujet et faisons l’analyse des attributs de PerDocData.

Analyse des attributs de PerDocData

La liste des attributs est longue, très longue, donc ce commentaire sera lui aussi très long.

Et cette fois je vais m’abstenir de tout traduire de l’anglais au français, je vais commenter directement. En effet avant même que je commente, mon article compte déjà 3 300 mots donc si je traduis puis commente, le texte va devenir illisible.

scienceDoctype (type: integer(), default: nil) – Scholar/Science Document type: <0 == not a Science Document — default 0 == Science doc fully visible >0 == Science doc but limited visibility, the number is the visible terms

On a donc là une mesure du caractère scientifique ou pas, du document. Le commentaire précise :

  • si le nombre est inférieur à 0, ça signifie que le document n’est pas scientifique
  • si le nombre est 0, c’est un document scientifique
  • si le nombre est supérieur à 0, c’est un document scientifique à la visibilité limitée, et « le nombre est les termes visibles », ce qui peut vouloir dire que le nombre indique le nombre de mots lisibles

ScaledExptIndyRank2 (type: integer(), default: nil) – experimental

Si je traduis et tente de décrypter, cet attribut veut dire « expérience à grande échelle de classement indépendant, version 2 ». Aucune idée de ce que ça peut désigner.

videoLanguage (type: GoogleApi.ContentWarehouse.V1.Model.QualityVidyaVideoLanguageVideoLanguage.t, default: nil) – Audio-based language classified by Automatic Language Identification (only for watch pages).

Le commentaire semble clair : cet attribut consiste à identifier la langue d’une vidéo présente sur une « watchpage », une page web dont le contenu principal est une vidéo. Cette identification a été faite par « Identification automatique de la langue » appliquée à l’audio de la vidéo.

phildata (type: GoogleApi.ContentWarehouse.V1.Model.PhilPerDocData.t, default: nil) –

L’attribut phildata renvoie au module PhilPerDocData, qui n’a lui-même que 2 attributs : PhilString, PhilVersion, sans commentaire. Jusqu’ici, impossible de savoir ce que signifie « phil ».

Si on cherche le mot « phil » dans les documents de la fuite, on trouve notamment le module FatcatCompactRephilClustersCluster, où Rephil fait penser à Refill, « remplissage ». Il pourrait s’agir d’un jeu de mots, désignant une technique de remplissage de données, liée à un ingénieur surnommé Phil par exemple.

uacSpamScore (type: integer(), default: nil) – The uac spam score is represented in 7 bits, going from 0 to 127. Threshold is 64. Score >= 64 is considered as uac spam.

On a là un « score de spam uac », or UAC signifie « Universal App Campaign » et désigne une modalité publicitaire de Google Ads, pour promouvoir les applications.

Il s’agit donc d’un score de spam des campagnes de pub Universal App.

DEPRECATEDAuthorObfuscatedGaia (type: list(String.t), default: nil) – The obfuscated google profile gaia id(s) of the author(s) of the document. This field is deprecated, use the string version.

Cette fois, c’est une page publique de Google qui nous renseigne sur ce qu’est Gaia :

« Un utilisateur est un utilisateur individuel identifié par un ID Gaia. Gaia est le système de gestion des ID pour tous les produits Google. Il peut s’agir d’une adresse e-mail associée à un domaine Google (par exemple, user@gmail.com) ou d’une adresse e-mail d’un autre domaine configuré par un administrateur de domaine Google Workspace. »

L’attribut obsolète « AuthorObfuscatedGaia », signifierait donc « identifiant Gaia dissimulé d’auteur ». On ne comprend pas bien de quel point de vue l’identifiant serait dissimulé :

  • est-ce une manière pour Google d’identifier le fait qu’un auteur inconnu est en fait un propriétaire d’email gmail ou de domaine Google Workspace, ce qui pourrait servir à repérer une forme de fraude ?
  • est-ce une manière d’identifier l’auteur d’un document anonyme ou signé par pseudonyme, pour évaluer son autorité par rapport au sujet dont traite le document ? (par exemple, si Francis Lalanne tweete sous le nom de Nounours28 à propos d’épidémiologie virale, est-il légitime ou pas ?)

spamtokensContentScore (type: number(), default: nil) – For SpamTokens content scores. Used in SiteBoostTwiddler to determine whether a page is UGC Spam. See go/spamtokens-dd for details.

SpamtokensContentScore se lit littéralement « score de contenu de tokens de spam », ce qui n’est pas hyper-clair. Le commentaire précise que cet attribut est utilisé dans SiteBoostTwiddler « pour déterminer si une page est du spam ugc (généré par les utilisateurs) » (par exemple, une url dans un commentaire).

Interprétation : Google mesure donc le niveau de spam générés par les utilisateurs sur tous types de documents : si une page web ou une vidéo est pleine de spam, alors peut-être que Google en diminue le trafic.

La mention de SiteBoostTwiddler est intéressante. On sait maintenant que Google dispose d’une série de Twiddlers, qui sont des modificateurs de classement qui interviennent après une première analyse et un premier classement, sur des bases probablement sémantiques et techniques. Ces Twiddlers prennent notamment en compte les interactions entre les documents et les utilisateurs : si les internautes restent longtemps sur une page, cliquent sur les boutons, regardent une vidéo, etc.

webrefEntities (type: GoogleApi.ContentWarehouse.V1.Model.RepositoryWebrefWebrefMustangAttachment.t, default: nil) – WebRef entities associated to the document. See go/webref for details.

Cet attribut est lié à l’indexation puisqu’il est question d’un module « Repository » (répertoire) et de Mustang, qui est un des systèmes d’indexation de Google.

Le module RepositoryWebrefWebrefMustangAttachment est lui-même qualifié d’obsolète.

PremiumData (type: GoogleApi.ContentWarehouse.V1.Model.PremiumPerDocData.t, default: nil) – Additional metadata for Premium document in the Google index.

PremiumData, donc « Données Premium » : mystérieux et intéressant !

Le commentaire indique qu’il s’agit de « Métadonnées additionnelles pour document Premium dans l’index Google ».

Le type de cet attribut est le module PremiumPerDocData, qui contient les attributs suivants :

Currency (type: integer(), default: nil) – type froogle/currency/currency.h
Date (type: String.t, default: nil) – publishing date (seconds since 1970,
Entitlement (type: list(integer()), default: nil) – entitlement data
IsArchival (type: boolean(), default: nil) – True if a free document is archival in nature.
IsEntitled (type: boolean(), default: nil) – User is entitled to see the premium content for free.
Price (type: integer(), default: nil) – price * 100 if available
Publication (type: String.t, default: nil) – negative values for prior dates) FP of the Premium publication name

Ces attributs nous éclairent un peu sur ce que pourraient être ces documents Premium :

  • le mot Premium lui-même suggère des ressources de qualité supérieure, faisant référence
  • les attributs Currency et Price suggèrent que l’accès à ces documents est payant

Il pourrait donc s’agir par exemple de documents payants, comme des articles scientifiques, des cours faits par des experts sur des plateformes e-learning reconnues, des cours publiés par des universités privées, etc.

A quoi peut donc servir l’attribut PremiumData ? J’imagine ceci :

  • à déterminer qu’un document en partie inaccessible mérite quand même d’être bien classé, grâce à sa qualité « premium »
  • ou, à valider la légitimité d’un concept, d’un auteur, etc, dont il serait question dans ce document « premium »

spamMuppetSignals (type: GoogleApi.ContentWarehouse.V1.Model.SpamMuppetjoinsMuppetSignals.t, default: nil) – Contains hacked site signals which will be used in query time joins. As of Oct’19, the field is stored in a separate corpus. It’ll only be populated for in-flight requests between retrieve and full-score in perdocdata. So no extra storage is needed on muppet side.

Littéralement, spamMuppetSignals signifie « signaux de marionnette de spam ». Le commentaire aide à comprendre cette métaphore : « Contient des signaux de site hacké qui seront utilisés au moment de la requête ». La marionnette, c’est donc la situation d’un site piraté, à qui Google ne peut plus faire confiance ?

knexAnnotation (type: GoogleApi.ContentWarehouse.V1.Model.SocialPersonalizationKnexAnnotation.t, default: nil) – For indexing k’nex annotations for FreshDocs.

Je ne comprend pas ce que sont les « annotations Knex », mais une recherche m’apprend que Knex est un « module de Node.js pour gérer l’ouverture et la fermeture d’une connexion à Cloud SQL pour PostgreSQL ».

Il est aussi question de FreshDocs, « documents frais » : à ce stade de mes investigations je ne sais que vaguement ce que c’est : on sait que Google utilise le caractère récent d’un document pour le classer, si par exemple un article parle de l’actualité et pas d’une info datée d’il y a 2 ou 10 ans.

smartphoneData (type: GoogleApi.ContentWarehouse.V1.Model.SmartphonePerDocData.t, default: nil) – Additional metadata for smartphone documents in the Google index.

Cet attribut renvoie vers le module SmartphonePerDocData, qui contient ce commentaire très éclairant :

Ce message est utilisé pour stocker des informations relatives aux smartphones. Remarque : MobilePerDocData est un message similaire, mais il est destiné aux téléphones mobiles bas de gamme.

On comprend donc qu’il y a 2 attributs PerDocData qui renvoie à 2 modules distincts, qui font la différence entre les smartphones et les mobiles bas-de-gamme.

Revenons au commentaire de l’attribut SmartphonePerDocData, il disait « Métadonnées additionnelles pour documents smartphone dans l’index Google ». Ce commentaire perturbe l’interprétation que j’ai faite plus haut du terme « document » : le terme pourrait donc être défini non seulement par son contenu (page web, image, vidéo), mais aussi par l’appareil qui le lit ?

Et ainsi, peut-être qu’une page web trop sophistiquée pour être lue par un vieux mobile se verrait attribuer l’attribut MobilePerDocData mais pas l’attribut SmartphonePerDocData ?

Une remarque au passage : je pense au rapport « Appareils » que fournit Google aux webmasters dans la Google Search Console. Il ne distingue que 3 types d’appareils : ordinateur, tablette, Mobile. On voit qu’une fois de plus, Google cache de l’info par omission. Il est possible qu’il fasse aussi des distinctions subtiles entre types d’ordinateurs (laptop, desktop ?)

semanticDateConfidence (type: integer(), default: nil) – DEPRECATED: semantic_date_confidence replaced by semantic_date_info.

Cet attribut de « confiance en la date sémantique » est qualifié d’obsolète et remplacé par l’attribut semanticDateInfo.

On en reparlera plus tard.

trendspamScore (type: integer(), default: nil) – For now, the count of matching trendspam queries.

Littéralement : « score de tendance de spam ». Comment cette tendance est-elle calculée ? à l’échelle du document, du site, ou à une échelle plus large ?

Le commentaire « Pour l’instant, le compte de requêtes de tendance de spam correspondantes » ne nous aide guère.

ScaledSpamScoreYoram (type: integer(), default: nil) – Spamscores are represented as a 7-bit integer, going from 0 to 127.

Littéralement : « score de spam Yoram mis à l’échelle ». Aucune info sur ce que signifie Yoram. Un prénom hébraïque, mais encore ?

numUrls (type: integer(), default: nil) – Total number of urls encoded in the url section = # of alternate urls + 1

Cet attribut est clair : il quantifie le nombre d’urls du document, et les définit comme étant le nombre d’urls alternatives (marquées par « alternate ») + 1.

Quel est l’utilité de cet attribut ? Aucune idée. Simple hypothèse : il pourrait exister un seul au-delà duquel ce nombre semblerait louche. Par exemple, à quoi pourrait servir d’avoir 100 urls alternatives ?

datesInfo (type: String.t, default: nil) – Stores dates-related info (e.g. page is old based on its date annotations). Used in FreshnessTwiddler. Use encode/decode functions from quality/timebased/utils/dates-info-helper-inl.h

Cet attribut « info de dates » sert explicitement à informer le « FreshnessTwiddler », le modificateur de classement en fonction de la fraîcheur. Concrètement ça semble signifier que si un contenu n’est plus frais, son classement doit être modifié.

pagerank2 (type: number(), default: nil) –

L’attribut pagerank2 est le premier cité de toute une série d’attributs comportant le terme pagerank :

  • pagerank (obsolète)
  • pagerank0
  • pagerank1
  • pagerank2
  • homepagePagerankNs
  • crawlPagerank
  • toolbarPagerank

Ici, il est intéressant d’observer que si on se renseigne sur le terme PageRank, on ne trouvera aucune mention de tout cela.

Inversement, si on cherche « pagerank0 », « pagerank1 » etc, on trouve tout simplement 0 occurrence pertinente.

Ce qui montre l’étendue de l’ignorance de la communauté SEO : on écrit n’importe quoi à tort et à travers, sans savoir vraiment de quoi on parle. Est-il clair que tout l’algo de Google est protégé par le secret industriel, et que nous jouons à essayer de gagner à un jeu dont les règles nous sont cachées par l’arbitre ?

nsrDataProto (type: GoogleApi.ContentWarehouse.V1.Model.QualityNsrNsrData.t, default: nil) – Stripped site-level signals, not present in the explicit nsr_* fields, nor compressed_quality_signals.

Avec cet attribut NsrDataProto, on retrouve le concept de NSR, Normalized Site Rank, que j’ai analysé dans le module QualityNsrNsrData.

Le commentaire le définit comme « signaux nettoyés, pris au niveau de tout le site, non présent dans les champs explicites Nsr, ni dans les CompressedQualitySignals« .

fringeQueryPrior (type: GoogleApi.ContentWarehouse.V1.Model.QualityFringeFringeQueryPriorPerDocData.t, default: nil) – Contains encoded FringeQueryPrior information. Unlikely to be meaningful for anyone other than fringe-ranking team. Contact fringe-ranking team if any questions, but do NOT use directly without consulting them.

Avec le nom de cet attribut, il est question de « préalable de requête marginale », et le commentaire dit qu’il est « improbable que cela signifie quelque chose sauf pour l’équipe de classement marginal ». Donc on est d’accord ! 😀

kaltixdata (type: GoogleApi.ContentWarehouse.V1.Model.KaltixPerDocData.t, default: nil) –

J’ai dû chercher pour comprendre : Kaltix est une jeune startup que Google a rachetée dès sa naissance en 2003. Ses fondateurs avaient trouvé un moyen d’accélérer 1000 fois le calcul du PageRank de Larry Page, et de personnaliser les résultats en fonction des utilisateurs.

Malheureusement le module KaltixPerDocData ne contient que 3 attributs (KaltixRank, LocalKaltixRank, SiteKaltixRank) sans aucun commentaire, donc on n’en saura pas plus pour l’instant.

ymylHealthScore (type: integer(), default: nil) – Stores scores of ymyl health classifier as defined at go/ymyl-classifier-dd. To use this field, you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.

Littéralement, « score de santé Votre argent votre vie ». Le YMYL, Your money your life, est un classement de Google qui sert à distinguer les sites dont le thème est très sensible, et présente un danger pour la survie médicale ou financière des personnes. Ces sites – banques, assurances, sites médicaux, sites e-commerce – sont donc particulièrement surveillés – et traités différemment d’un blog sur les chats angora.

Ici, cet attribut sert donc à indiquer qu’un site a été classé comme principalement lié au thème sensible de la santé.

authorObfuscatedGaiaStr (type: list(String.t), default: nil) –

On retrouve le même attribut qu’on a déjà vu ci-dessus en version obsolète.

lastSignificantUpdate (type: String.t, default: nil) – Last significant update of the document. This is sourced from the quality_timebased.LastSignificantUpdate proto as computed by the LSUSelector from various signals. The value is a UNIX timestamp in seconds.

Cet attribut se lit « dernière mise à jour significative ». Ce que Google considère comme significatif n’est pas défini.

Il sert probablement à refuser d’accorder un boost de trafic de type « fraîcheur » à des pages qui n’auraient été que superficiellement mises à jour (genre je change la date dans le titre ou dans le texte, ou je modifie la date de la page dans les réglages du CMS, et je pense berner Google… qui veille à ne pas se faire berner grâce à cet attribut.)

A noter qu’on a là l’acronyme LSU, signifiant LastSignificantUpdate, ce qui nous donne un indice sur la philosophie de l’usage de ces acronymes dans la nomenclature : souvent, si on a un acronyme, on a une mention plus explicite quelque part ailleurs dans la documentation…

spambrainData (type: GoogleApi.ContentWarehouse.V1.Model.SpamBrainData.t, default: nil) – Host-v1 sitechunk level scores coming from spambrain.

On a là la mention très explicite de « données SpamBrain », et on sait que SpamBrain est une importante mise à jour antispam de Google. Cet attribut renvoie à un module SpamBrainData sur lequel j’investiguerai.

Le commentaire compliqué sonne intéressant : « scores au niveau du morceau de site de l’hôte v1, venant de spambrain ».

DEPRECATEDQuarantineWhitelist (type: boolean(), default: nil) –

« Liste blanche de quarantaine », attribut obsolète : était-ce lié à la gestion de la pandémie ?

tundraClusterId (type: integer(), default: nil) – This field is propagated to shards. Stores clustering information on a site level for the Tundra project. This field is deprecated – used the equivalent field inside nsr_data_proto instead.

Il y avait donc un « projet Toundra », mais cet attribut est obsolète et a été remplacé par un champ dans le « proto NsrData ».

bodyWordsToTokensRatioTotal (type: number(), default: nil) –

Ah, voilà un attribut très intéressant : « ratio total de mots sur tokens dans le body » (corps du document en HTML).

Si cette interprétation est correcte, ça tendrait à montrer que Google fait une analyse sémantique et de densité des mots-clés, non pas au niveau du document HTML (incluant une quantité variable de code CSS, JS et autres), mais au niveau du texte du corps du document.

homepagePagerankNs (type: integer(), default: nil) – The page-rank of the homepage of the site. Copied from the cdoc.doc().pagerank_ns() of the homepage.
topPetacatTaxId (type: integer(), default: nil) – Top petacat of the site. Used in SiteboostTwiddler to determine result/query matching.

Cet attribut-là aussi confirme quelque chose que la communauté SEO croit en majorité depuis longtemps, à savoir que le PageRank du domaine, et celui de la page d’accueil, compte comme facteurs de classement de chaque page (et sans doute de chaque image, de chaque vidéo) du site.

Le commentaire précise que homepagePagerankNs « est utilisé dans SiteboostTwiddler pour déterminer la correspondance résultat/requête ».

OriginalContentScore (type: integer(), default: nil) – The original content score is represented as a 7-bits, going from 0 to 127. Only pages with little content have this field. The actual original content score ranges from 0 to 512. It is encoded with quality_q2::OriginalContentUtil::EncodeOriginalContentScore(). To decode the value, use quality_q2::OriginalContentUtil::DecodeOriginalContentScore().

Ce « score de contenu original » n’est utilisé que sur les « pages qui ont peu de contenu ».

contentAttributions (type: GoogleApi.ContentWarehouse.V1.Model.ContentAttributions.t, default: nil) –

Je ne suis pas bien sûr de comprendre à quoi servent ces « attributions de contenu ». Le module ContentAttributions laisse penser qu’il s’agit d’attribuer « le crédit » ( = le statut d’auteur, j’imagine) d’une page web à une autre. Peut-être est-ce une manière d’annuler les effets du plagiat ? Ou, d’attribuer au site de tel auteur le contenu d’une page qu’il aurait publié en tant qu’invité sur un autre site ?

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

Aucune idée de ce que cela signifie.

DocLevelSpamScore (type: integer(), default: nil) – The document spam score is represented as a 7-bits, going from 0 to 127.

« Score de spam au niveau du document ».

urlPoisoningData (type: GoogleApi.ContentWarehouse.V1.Model.UrlPoisoningData.t, default: nil) – Contains url poisoning data for suppressing spam documents.

Cet url sonne étrange : « données d’empoisonnement d’url », et le commentaire dit « Contient des données d’empoisonnement d’url pour supprimer les documents de spam ».

Je ne sais pas comment fait Google pour empoisonner des urls, mais on comprend l’intention générale.

Event (type: list(GoogleApi.ContentWarehouse.V1.Model.PerDocDebugEvent.t), default: nil) – Free form debug info. NB2: consider carefully what to save here. It’s easy to eat lots of gfs space with debug info that nobody needs…

Je passe, le commentaire dit que ça parle d’info de débuggage dont personne n’a besoin.

mediaOrPeopleEntities (type: GoogleApi.ContentWarehouse.V1.Model.ImageQualitySensitiveMediaOrPeopleEntities.t, default: nil) – Contains the mids of the 5 most topical entities annotated with selected KG collections. This information is currently used on Image Search to detect cases where results converged to mostly a single person or media entity. More details: go/result-set-convergence.

Le commentaire dit que cet attribut sert sur Google Images, dans les cas où les résultats représentent une personne plus ou moins célèbre, et dans ce cas cette attribut contient les 5 « entités les plus thématiques, annotées avec les collections Knowledge Graph sélectionnées ».

Peu importe ce que signifie exactement ce jargon : je ne pense pas que cet attribut joue un rôle important dans le classement donc je passe.

scaledSelectionTierRank (type: integer(), default: nil) – Selection tier rank is a language normalized score ranging from 0-32767 over the serving tier (Base, Zeppelins, Landfills) for this document. This is converted back to fractional position within the index tier by scaled_selection_tier_rank/32767.
pageTags (type: list(integer()), default: nil) –

Je ne comprend presque rien à cet attribut. Il est question d’ « échelon de classement pour le document ».

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

Encore un attribut totalement énigmatique. Même DeepL n’arrive pas à trouver un sens à cet assemblage de mots. Smearing signifie maculage, barbouillage, donc si je traduis littéralement j’obtiens « barbouillage total max d’ancres hors-domaine ». Ces ancres pourraient désigner les mots sur lesquels sont placés les liens de tous les backlinks vers le document en question.

pagerank (type: number(), default: nil) – Experimental pageranks (DEPRECATED; only pagerank in MustangBasicInfo is used).

On retrouve le pagerank, et on a déjà dit que cet attribut est obsolète.

QuarantineInfo (type: integer(), default: nil) – bitmask of QuarantineBits (or’d together) used to store quarantine related information. For example: QUARANTINE_WHITELIST | QUARANTINE_URLINURL.

J’hésite dans l’interprétation de cet attribut : soit il s’agit d’un reliquat de la période Covid (qui a laissé des traces dans l’API de Google), soit il s’agit d’une « quarantaine » (une exclusion temporaire de la recherche ?) appliquée à des documents ?

rosettaLanguages (type: list(String.t), default: nil) – Top two document language BCP-47 codes as generated by the RosettaLanguageAnnotator in the decreasing order of probability.

Cet attribut détermine les 2 principales langues du document, la langue la plus probable puis la moins probable. La langue est exprimée selon la norme BCP-47, très courant en informatique.

(Si on applique cet attribut à mon article, il est écrit en fr-FR et en en-US.)

freshnessEncodedSignals (type: String.t, default: nil) – Stores freshness and aging related data, such as time-related quality metrics predicted from url-pattern level signals. Use the encoding decoding API in quality/freshness/docclassifier/aging/encoded-pattern-signals.h This field is deprecated.

Ces « signaux encodés de fraîcheur » « stockent les données liées à la fraîcheur et au vieillissement comme les métriques de qualité temporelles prédites de signaux au niveau du schéma d’url ».

Vraiment les ingénieurs de Google ont le chic pour pratiquer un anglais barbare où plus rien n’est dit simplement.

imagedata (type: GoogleApi.ContentWarehouse.V1.Model.ImagePerDocData.t, default: nil) –

Cet attribut renvoie au modèle, dont j’ai déjà dit qu’il ne contient que 5 attributs peu intéressants : DEPRECATEDEntropyColor, filename, flags, height, width.

N’empêche, ceci confirme mon affirmation : ce module liste les attributs qui s’appliquent à divers types de documents, notamment des images, qui ont aussi quelques champs supplémentaires qui ne s’appliquent qu’à elles.

Et là, quand même, il y a un scoop : jusqu’ici, dans tout ce que j’ai appris en SEO, par des gens qui savent autant que par des gens qui croient savoir (la majorité), personne ne m’a clairement dit que Google traitait les pages web, les images et les vidéos, avec énormément de paramètres communs.

Mais attention, je n’ai pas lu 100% des documents de l’API, donc j’ignore s’il y a par ailleurs des différences majeures dans le traitement des types de documents.

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

Je ne comprends pas cet attribut et j’ai l’impression qu’il y a une faute de frappe. « Docid » ne veut rien dire en anglais donc je pense qu’il s’agit de « doc ID », et donc si on respecte le camel case ça devrait s’écrire DocId. Littéralement cet attribut serait l' »identifiant de document du corpus vidéo ». C’est à dire, l’identifiant de la vidéo, en langage humain ??

queriesForWhichOfficial (type: GoogleApi.ContentWarehouse.V1.Model.OfficialPagesQuerySet.t, default: nil) – The set of (query, country, language) triples for which this document is considered to be the official page. For example, www.britneyspears.com would be official for (« britney spears », « us », 0) and others (0 is English).

Encore une formulation bien curieuse pour cet attribut : « requêtes pour lesquelles officiel » : on est d’accord, ce n’est pas français, et déjà en anglais, ça ne sonne pas comme de l’anglais correct. Décidément ces geeks ont pour passion de violer les règles de la langue de Shakespeare de toutes les manières.

Heureusement, le commentaire nous explique plus clairement de quoi il s’agit : une série de trios de données, chaque trio étant constitué de la requête, du pays et de la langue, pour lesquelles le document est considéré comme la page officielle.

Et le commentaire donne cet exemple : la page d’accueil du site www.britneyspears.com est officielle pour le trio de données « britney spears », « états-unis », « anglais ».

nsrIsCovidLocalAuthority (type: boolean(), default: nil) – This field is propagated to shards. In addition, it is populated at serving time by go/web-signal-joins. This field is deprecated – used the equivalent field inside nsr_data_proto instead.

Littéralement, cet attribut s’appelle « classement de site normalisé / est une autorité locale Covid ». Et heureusement il est obsolète.

crawlerIdProto (type: GoogleApi.ContentWarehouse.V1.Model.LogsProtoIndexingCrawlerIdCrawlerIdProto.t, default: nil) – For crawler-ID variations, the crawling context applied to the document. See go/url, and the description in google3/indexing/crawler_id

Ce « proto d’identifiant de crawler », est lié à un processus très technique que je ne maîtrise pas, l’indexation. Apparemment, chaque document se voit attribuer un « crawling context », un contexte de crawl, le crawl étant l’opération par laquelle Google envoie un « bot » visiter un document.

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

Sans commentaire, il est impossible de dire de quoi se compose ce « score de spam échelonné Eric ». Le prénom Eric fait penser à l’ex PDG de Google Eric Schimdt, mais pourrait désigner n’importe quel Eric ingé chez Google, un frenchy par exemple.

biasingdata (type: GoogleApi.ContentWarehouse.V1.Model.BiasingPerDocData.t, default: nil) –

Cet attribut renvoie au module BiasingPerDocData, qui n’a qu’un attribut, qui renvoie au module BiasingPerDocDataBiasingField, qui n’a que 2 attribut : name, et value.

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

Exactement le même attribut que ci-dessus, avec Expt en plus, qui signifie expérimental.

v2KnexAnnotation (type: GoogleApi.ContentWarehouse.V1.Model.QualitySherlockKnexAnnotation.t, default: nil) – For indexing v2 k’nex, see/go/knex-v2-doc-annotation for details.

On a déjà parlé de Knex, un module Node.js. Cet attribut renvoie à un module qui renvoie à un autre module, QualitySherlockKnexAnnotationItem.

MobileData (type: GoogleApi.ContentWarehouse.V1.Model.MobilePerDocData.t, default: nil) – Additional metadata for lowend mobile documents in the Google index.

Enfin un attribut limpide dans cet océan de turbidité !!! Données mobile, représente les « données additionnelles pour documents mobile bas-de-gamme dans l’index Google ».

J’imagine que cet attribut est fort utile dans le contexte de pays pauvres et pourtant très peuplés, comme l’Inde et beaucoup de pays africains, où des millions de personnes surfent sur Internet avec des téléphones peu performants.

BookCitationData (type: GoogleApi.ContentWarehouse.V1.Model.BookCitationPerDocData.t, default: nil) – the book citation data for each web page, the average size is about 10 bytes

Le commentaire de cet attribut est explicite, quoiqu’ambigu : « la donnée de citation de livre pour chaque page web ». L’attribut renvoie au module BookCitationPerDocData, décrit comme « données par document pour la page web à propos du livre cité ». Et ce module a lui-même des attributs comme bookId (l’identifiant du livre, dans Google Books j’imagine ? ou l’ISBN ?), discretizedCitationScore (« score discrétisé de citation »), previewable (qui indique si un extrait du livre est disponible dans ce document), secondBookId et secondDiscretizedCitationScore au cas où il y ait une seconde citation.

Conclusion, on comprend assez bien de quoi il s’agit, mais moins bien l’utilité de tout cela. A quoi peut bien servir le fait de savoir si une page web cite un livre ? Est-ce bénéfique pour le classement ?

semanticDate (type: integer(), default: nil) – SemanticDate, estimated date of the content of a document based on the contents of the document (via parsing), anchors and related documents. Date is encoded as a 32-bits UNIX date (1970 Jan 1 epoch). Confidence is encoded using a SemanticDate specific format. For details of encoding, please refer to quality/freshness/docclassifier/semanticdate/public/semantic_date.proto

La « date sémantique », c’est la date indiquée dans un document : le 1er juin (date technique), je peux très bien publier une page web datée du 7 mai ou du 3 juillet (dates sémantiques), il me suffit d’écrire cette date.

Google utilise peut-être cette date sémantique pour savoir si un contenu est récent ou vieux, et pour savoir si une « mise à jour » est véritable ou frauduleuse et superficielle. Par exemple, si je renomme ma page « les meilleurs mixers à soupe de 2022 » en « les meilleurs mixers à soupe de 2024 », la date sémantique change, alors que le contenu ne change pas, ce qui peut servir de méthode de détection à Google, pour en déduire que cette page n’est pas réellement aussi à jour qu’elle dit l’être. (Car comme Google, les gens mentent !)

biasingdata2 (type: GoogleApi.ContentWarehouse.V1.Model.BiasingPerDocData2.t, default: nil) – A replacement for BiasingPerDocData that is more space efficient. Once this is live everywhere, biasingdata will be deprecated.

Littéralement, « données de biaisage 2 », ce terme désignant peut-être une opération de classement ou plutôt de reclassement ? L’attribue mène à un module qui mène à un autre, qui contient 4 attributs : compressedName, value, valueFloat, valueInt.

ymylNewsScore (type: integer(), default: nil) – Stores scores of ymyl news classifier as defined at go/ymyl-classifier-dd. To use this field, you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_nfg9oAldou.

Ce « score de news Your Money Your life » « stocke les scores de classificateur de news YMYL ».

saftLanguageInt (type: list(integer()), default: nil) – Top document language as generated by SAFT LangID. For now we store bare minimum: just the top 1 language value, converted to the language enum, and only when different from the first value in ‘languages’.

Cet attribut stocke la langue principale du document, uniquement si elle diffère de la première valeur de l’attribut « langues ».

rsApplication (type: GoogleApi.ContentWarehouse.V1.Model.RepositoryAnnotationsRdfaRdfaRichSnippetsApplication.t, default: nil) – Application information associated to the document.

Cet attribut se lit « application Rich snippets » – on sait que rs signifie Rich snippets grâce au nom du module auquel il renvoie. On aimerait bien savoir comment cela fonctionne…

domainAge (type: integer(), default: nil) – 16-bit

« Age du (nom de) domaine ». Aucune indication sur l’utilisation faite de cette donnée. mais j’ai remarqué qu’un site nouveau-né ne ranke jamais, et je me doutais qu’il existait une évaluation de l’âge du domaine. Cet attribut semble le confirmer.

lastSignificantUpdateInfo (type: String.t, default: nil) – Metadata about last significant update. Currently this only encodes the quality_timebased.LastSignificantUpdate.source field which contains the info on the source of the signal. NOTE: Please do not read the value directly. Use helpers from quality/timebased/lastsignificantupdate/lsu-helper.h instead.

On a déjà vu ci-dessus un attribut lastSignificantUpdate, donc celui-ci en est un complément. Le commentaire explique que cet attribut ne stocke qu’un champ qui contient « l’info sur la source du signal ».

pagerank1 (type: number(), default: nil) –

On a déjà vu que ce module cite pas moins de 7 attributs contenant le terme « pagerank ».

spamCookbookAction (type: GoogleApi.ContentWarehouse.V1.Model.SpamCookbookAction.t, default: nil) – Actions based on Cookbook recipes that match the page.

Littéralement : « action de livre de recettes (ou livre de cuisine) de spam »… Le commentaire dit : « Actions basées sur les recettes du Livre de recettes qui correspondent à la page ».

Un Cookbook, en informatique et chez Google, est une collection de recettes ou de solutions pratiques pour accomplir des tâches spécifiques. Ces recettes peuvent inclure des exemples de code, des configurations et des conseils sur la façon d’utiliser certaines technologies ou API. Google publie souvent des cookbooks pour aider les développeurs à comprendre et à utiliser leurs services, comme Google Cloud, Firebase, ou les bibliothèques d’apprentissage automatique.

compressedUrl (type: String.t, default: nil) – Compressed URL string used for SETI.

Url compressée « utilisée pour SETI ». Ce terme SETI n’est pas mentionné ailleurs dans les documents de l’API donc impossible d’en savoir plus.

extraData (type: GoogleApi.ContentWarehouse.V1.Model.Proto2BridgeMessageSet.t, default: nil) – This field is available only in the docjoins: it is cleared before building per-doc data in both Mustang and Teragoogle. (MessageSet is inefficient in space for serving data) Use this for all new fields that aren’t needed during serving. Currently this field contains: UrlSignals for the document level spam classifier (when the doclevelspamscore is set). PerDocLangidData and realtimespam::ClassifierResult for the document level fresh spam classifier (when the doc-level fresh spam score is generated). MicroblogDocQualitySignals for document-level microblog spam classifier. This only exists in Firebird for now. spam_buckets::BucketsData for a document-structure hash This field is non-personal since the personal fields in MessageSet are not populated in production.

Littéralement, « Données supplémentaires ». Le commentaire précise :

« Ce champ n’est disponible que dans les « docjoins » : il est nettoyé avant de construire les données par document (per doc data) dans Mustang et TeraGoogle [qui sont deux formes d’index utilisées par Google]. Utilisez ce champ pour tous les nouveaux champs qui ne sont pas nécessaires pendant le service [au sens informatique : le moment où une ressource est servie à un terminal client]. Actuellement ce champ contient : UrlSignals pour le classificateur de spam au niveau du document. PerDocLangidData et realtimespam::ClassifierResult pour le classificateur de spam frais au niveau du document. MicroblogDocQualitySignals pour le classificateur de spam de type microblog au niveau du document. Ceci n’existe qu’au niveau de Firebird pour l’instant. spam_buckets::BucketsData pour un hash de structure de document. Ce champ est non-personnel puisque les champs personnels dans MessageSet ne sont pas peuplés en production. »

Bref, beaucoup de jargon. Je pense comprendre certaines choses :

  • extraData sert essentiellement à stocker des infos relative au spam
  • le spam de type microblog est probablement lié à des pratiques d’édition microscopique, par exemple quand on va juste rajouter un lien sponsorisé non-déclaré dans un article, ce que Google considère comme une tentative de fraude de ses algorithmes (Google se donne ainsi un pouvoir mondial de police du web, qui échappe à tout contrôle démocratique)
  • Firebird est un serveur de base de données, open-source. J’ignore si c’est bien de ce Firebird-là que parle la doc Google.

socialgraphNodeNameFp (type: String.t, default: nil) – For Social Search we store the fingerprint of the SG node name. This is used in one of the superroot’s PRE_DOC twiddlers as a lookup key for the full Social Search data. PRE_DOC = twiddlers firing before the DocInfo request is sent to the mustang backend.

Littéralement, empreinte de nœud de nom du graph social. Le commentaire dit : « Pour la Recherche Sociale on stocke l’empreinte du nœud de nom du graph social. Ceci est utilisé dans un des twiddlers PRE_DOC de Superroot en tant que clé de recherche pour les données complètes de Recherche Sociale. PRE_DOC = twiddlers qui se déclenchent avant que la requête DocInfo soit envoyée au backend Mustang.

Commentaire :

  • le Social Graph fait évidemment penser au célèbre Knowledge Graph de Google. Appliqué cette fois aux personnes humaines ?
  • il existe donc une « Recherche Sociale » ? dont le SEO n’avait guère entendu parler 🙂
  • les Twiddlers sont un des grands enseignements de la Google Leak : on a appris leur existence, il s’agit de modificateurs de classement qui opèrent après un premier classement algorithmique

urlAfterRedirectsFp (type: String.t, default: nil) – These two fingerprints are used for de-duping results in a twiddler. They should only be populated by freshdocs, and will only be present for documents that are chosen to be canonicals in a cluster whose previous canonical is also in the index. Additionally, url_after_redirects_fp is only present if it is different from a fingerprint of the URL.

Littéralement : « empreinte d’url après redirections ». Commentaire :

« Ces deux empreintes sont utilisées pour le dédoublonnage des résultats dans un twiddler. Ils ne doivent être renseignés que par freshdocs et ne seront présents que pour les documents choisis pour être canoniques dans un cluster dont le précédent canonique est également dans l’index. De plus, url_after_redirects_fp n’est présent que s’il est différent d’une empreinte de l’URL. »

localizedCluster (type: GoogleApi.ContentWarehouse.V1.Model.IndexingDupsLocalizedLocalizedCluster.t, default: nil) – Information on localized clusters, which is the relationship of translated and/or localized pages.

« Cluster localisé ». Commentaire :

« Informations sur les groupes localisés, c’est-à-dire la relation entre les pages traduites et/ou localisées. »

pageregions (type: String.t, default: nil) – String that encodes the position ranges for different regions of the document. See « indexer/pageregion.h » for an explanation, and how to decode the string

« Régionspages » est donc une « chaîne de caractères qui encode les fourchettes de position pour différentes régions d’un document ».

Je ne pense pas que la signification de « régions » soit géographique, il s’agit plutôt de zones de la page web ? S’il s’agissait de zones comme l’en-tête et le pied de page, j’imagine que l’intitulé serait plus précis et moins générique, donc je pense qu’il peut s’agir de zones du contenu d’une page complexe : la zone des commentaires, la zone des articles similaires ?

KeywordStuffingScore (type: integer(), default: nil) – The keyword stuffing score is represented in 7 bits, going from 0 to 127.

Voilà un attribut très intéressant : le « score de bourrage de mots-clés ». Il semble donc 100% certain que cette technique bête et méchante, SEO primitif de l’ère primitive de Google, n’a plus lieu d’être.

spambrainTotalDocSpamScore (type: number(), default: nil) – The document total spam score identified by spambrain, going from 0 to 1.

« Score SpamBrain total de spam de document » – et commentaire très explicite et simple, pour une fois : « Le score total de spam du document identifié par spambrain, allant de 0 à 1. »

noimageframeoverlayreason (type: integer(), default: nil) – If not 0, we should not show the image in overlay mode in image snippets

« Raison de pas d’overlay d’image frame »… Commentaire : « Si pas 0, l’image ne doit pas être affichée en mode superposition dans les extraits d’image. »

Je ne comprend pas bien, Google affiche des images en superposition ?? Où ça ??

scienceHoldingsIds (type: list(String.t), default: nil) – Deprecated 2016/01/14.

Attribut obsolète depuis janvier 2016 !!! Voilà une info bien curieuse. Google a des traces de données obsolètes depuis 8 ans, voire plus ?

crawlPagerank (type: integer(), default: nil) – This field is used internally by the docjoiner to forward the crawl pageranks from original canonicals to canonicals we actually chose; outside sources should not set it, and it should not be present in actual docjoins or the index.

« PageRank de crawl ». « Ce champ est utilisé en interne par le docjoiner pour transférer les pageranks de crawl des canonicals originaux vers les canonicals que nous avons effectivement choisis ; les sources externes ne doivent pas le définir et il ne doit pas être présent dans les docjoins actuels ou dans l’index. »

BlogData (type: GoogleApi.ContentWarehouse.V1.Model.BlogPerDocData.t, default: nil) –

Cet attribut récupère donc les données du module BlogPerDocData, qui lui-même contient 14 attributs.

nsrIsVideoFocusedSite (type: boolean(), default: nil) – This field is propagated to shards. It will also be populated at serving time by go/web-signal-joins (see b/170607253). Bit indicating whether this site is video-focused, but not hosted on any major known video hosting domains. This field is deprecated – used the equivalent field inside nsr_data_proto instead.

« Classement normalisé du site – Est un site centré sur la vidéo ». « Ce champ est propagé dans les unités de stockage (shards). Il sera également alimenté au moment du service par go/web-signal-joins (voir b/170607253). Bit indiquant si ce site est axé sur la vidéo, mais n’est pas hébergé sur l’un des principaux domaines d’hébergement vidéo connus. Ce champ est obsolète – utilisez plutôt le champ équivalent dans nsr_data_proto. »

Ce commentaire nous aide un peu à comprendre le concept de NSR, Normalized site rank, classement normalisé du site. Il semble indiquer que ce classement se fait par type de site (un site de vidéo, un blog, un magazine par exemple ?), et non pas par un classement par ordre dans une liste comme dans les résultats de Google.

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

On a déjà commenté l’énigmatique attribut ScaledSpamScoreYoram, dont on a ici une version expérimentale.

spamrank (type: integer(), default: nil) – The spamrank measures the likelihood that this document links to known spammers. Its value is between 0 and 65535.

« Classement de spam ». « Le spamrank mesure la probabilité que ce document soit lié à des spammeurs connus. Sa valeur est comprise entre 0 et 65535. »

compressedQualitySignals (type: GoogleApi.ContentWarehouse.V1.Model.CompressedQualitySignals.t, default: nil) –

Cet attribut renvoie au module CompressedQualitySignals dont j’ai déjà fait une analyse détaillée.

videodata (type: GoogleApi.ContentWarehouse.V1.Model.VideoPerDocData.t, default: nil) –

Cet attribut renvoie au module VideoPerDocData, qui n’a que 2 attributs qui renvoient à 2 modules : MediaIndexVideoCoreSignals et MediaIndexVideoFrames. Les noms de ces modules disent ce qu’ils font : il s’agit des signaux vitaux et des « frames » vidéo de l’index des médias de Google – les médias étant probablement les documents de type vidéo et image.

s3AudioLanguage (type: GoogleApi.ContentWarehouse.V1.Model.S3AudioLanguageS3AudioLanguage.t, default: nil) – Primary video’s audio language classified by S3 based Automatic Language Identification (only for watch pages).

« Langage audio S3 ». « Langue audio de la vidéo principale classée par l’identification automatique de la langue basée sur S3 (uniquement pour les pages de visionnage). »

watchpageLanguageResult (type: GoogleApi.ContentWarehouse.V1.Model.WatchpageLanguageWatchPageLanguageResult.t, default: nil) – Language classified by the WatchPageLanguage Model (go/watchpage-language). Only present for watch pages.

« résultat langage de page de visionnage ». « Langue classée par le modèle WatchPageLanguage (go/watchpage-language). Uniquement présent pour les pages de visionnage. »

appsLink (type: GoogleApi.ContentWarehouse.V1.Model.QualityCalypsoAppsLink.t, default: nil) – AppsLink contains Android application IDs in outlinks. It is used to improve results ranking within applications universal. See http://go/apps-universal for the project details.

« Lien applications ». « AppsLink contient les identifiants des applications Android dans les liens externes. Il est utilisé pour améliorer le classement des résultats dans les applications universelles.  »

desktopInterstitials (type: GoogleApi.ContentWarehouse.V1.Model.IndexingMobileInterstitialsProtoDesktopInterstitials.t, default: nil) – Contains desktop interstitials signal for VOLT ranking change.

« Intersticiels ordinateur de bureau ». « Contient des interstitiels de bureau signalant le changement de classement de VOLT. »

Note : VOLT, encore un système de Google dont la communauté SEO ignorait totalement l’existence. ça doit bien rigoler chez Google en nous lisant.

La doc Google ne cite Volt que quelques fois, notamment dans ce module, IndexingMobileVoltVoltPerDocData, qui ne stocke que 2 types d’info : les Core Web Vitals et le https.

liveResultsData (type: GoogleApi.ContentWarehouse.V1.Model.WeboftrustLiveResultsDocAttachments.t, default: nil) –

Cet attribut renvoie au module WeboftrustLiveResultsDocAttachments, qui n’a que 2 attributs :

  • docBoost, « Informations sur l’amélioration potentielle du classement du document en raison de son flux de résultats en direct. »
  • providerAttachment, « Identifie un résultat en direct qui doit être joint au document. »

Note : le terme Web of Trust, Toile de confiance, vient de l’univers de la cryptographie et désigne un système décentralisé où chacun choisit à qui il fait confiance. Je ne comprends pas bien le lien entre ce concept et celui de « Live Results ».

crowdingdata (type: GoogleApi.ContentWarehouse.V1.Model.CrowdingPerDocData.t, default: nil) –

Cet attribut « données de peuplement » renvoie au module CrowdingPerDocData qui renvoie au module CrowdingPerDocDataNewsCluster, qui nous offre ce commentaire lumineux : « Pour le crowding in news, nous devons conserver des données sur les X dernières itérations de clustering. » Evidemment !

nsrSitechunk (type: String.t, default: nil) – SiteChunk computed for nsr. It some cases it can use more information than just url (e.g. youtube channels). See NsrAnnotator for details. If sitechunk is longer than –populate_nsr_sitechunk_max_length (default=100), it will not get populated. This field might be compressed and needs to be decoded with quality_nsr::util::DecodeNsrSitechunk. See go/nsr-chunks for more details. This field contains only nontrivial primary chunks.

« Classement normalisé du site / Morceau de site ». « Morceau de site calculé pour nsr. Dans certains cas, il peut utiliser plus d’informations que la simple url (par exemple, les chaînes YouTube). Voir NsrAnnotator pour plus de détails. Si le sitechunk est plus long que –populate_nsr_sitechunk_max_length (default=100), il ne sera pas renseigné. Ce champ peut être compressé et doit être décodé avec quality_nsr::util::DecodeNsrSitechunk. Voir go/nsr-chunks pour plus de détails. Ce champ ne contient que des morceaux primaires non triviaux. »

Note : je vais me permettre encore une petite remarque acerbe. Quand on voit le niveau intellectuel de beaucoup de « Guides ultimes du référencement », écrits par des copieurs qui croient savoir, et le niveau de technicité et de complexité de la doc de Google, on comprend qu’il y a un monde entre eux.

originalTitleHardTokenCount (type: integer(), default: nil) – The number of hard tokens in the title.

« Compte des token durs du titre original ». « Le nombre de tokens durs dans le titre ».

Note : les tokens, rendus célèbres par les LLM comme ChatGPT, sont des unités de traitement de l’information linguistique en traitement automatique du langage naturel. Très concrètement, il s’agit de petites suites de caractères, par exemple 4 caractères.

A quoi peut servir cette mesure ? A limiter le traitement d’un titre excessivement long ?

hostAge (type: integer(), default: nil) – The earliest firstseen date of all pages in this host/domain. These data are used in twiddler to sandbox fresh spam in serving time. It is 16 bit and the time is day number after 2005-12-31, and all the previous time are set to 0. If this url’s host_age == domain_age, then omit domain_age Please use //spam/content/siteage-util.h to convert the day between epoch second. Regarding usage of Sentinel values: We would like to check if a value exists in scoring bundle while using in Ranklab AST. For this having a sentinel value will help us know if the field exists or has a sentinel value (in the case it does not exist). 16-bit

« Âge de l’hôte ». « La date la plus ancienne à laquelle toutes les pages de cet hôte/domaine ont été vues pour la première fois. Ces données sont utilisées par twiddler pour mettre à l’épreuve les spams récents dans le temps de service. Il s’agit de 16 bits et le temps est le nombre de jours après 2005-12-31, et tous les temps précédents sont mis à 0. Si l’host_age de cette url == domain_age, alors omettre domain_age Veuillez utiliser //spam/content/siteage-util.h pour convertir le jour entre les secondes de l’époque. En ce qui concerne l’utilisation des valeurs Sentinel : Nous aimerions vérifier si une valeur existe dans le paquet de notation lors de l’utilisation dans Ranklab AST. Pour cela, une valeur sentinelle nous aidera à savoir si le champ existe ou s’il a une valeur sentinelle (dans le cas où il n’existe pas). 16-bit »

Notes :

  • l’hôte, en informatique, c’est en gros le domaine et son hébergement
  • le temps de service, c’est le moment où Google répond à une requête par une page de résultats
  • le commentaire indique clairement qu’il ne s’agit pas de l’âge du domaine en tant que tel : ce n’est pas la date à laquelle au moins une page a été vue, mais la date à laquelle TOUTES LES PAGES DE CET HÔTE/DOMAINE ont été vues pour la première fois » : c’est donc l’âge de la dernière version complète de ce site, âge qui changera donc à chaque publication d’url. Ceci interdit toute interprétation du type « Oh, Google censure les bébés sites » ou « promeut les vieux sites ».
  • la date de la dernière version complète du site peut servir à savoir depuis combien de temps un site toujours en ligne a été abandonné, au sens où il n’aurait plus rien publié
  • aucune idée de ce qu’est une valeur Sentinelle

inNewsstand (type: boolean(), default: nil) – This field indicates whether the document is in the newsstand corpus.

« Dans kiosque à journaux ». « Ce champ indique si le document fait partie du corpus kiosque à journaux. »

Hypothèse : peut-être que ce « corpus kiosque » inclut les articles de presse avec qui Google a passé des accords. Google rémunère notamment la presse écrite pour le fait d’afficher ses contenus.

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

« Origine ». On l’a enfin trouvée ! Sans commentaire…

launchAppInfo (type: GoogleApi.ContentWarehouse.V1.Model.QualityRichsnippetsAppsProtosLaunchAppInfoPerDocData.t, default: nil) – Info on how to launch a mobile app to consume this document’s content, if applicable (see go/calypso).

« Info de lancement d’app ». « Informations sur la façon de lancer une application mobile pour consommer le contenu de ce document, le cas échéant. »

eventsDate (type: list(String.t), default: nil) – Date for Events. A web page might list multiple events with different dates. We only take one date (start date) per event.

« Date d’évènement ». « Date des événements. Une page web peut énumérer plusieurs événements avec des dates différentes. Nous ne prenons en compte qu’une seule date (date de début) par événement. »

Note : c’est intéressant ; ça pourrait vouloir dire qu’une page dont le contenu consiste à afficher des évènements passés deviendrait donc peu pertinente et serait déclassée ?

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

« Info page d’accueil ».

GibberishScore (type: integer(), default: nil) – The gibberish score is represented in 7 bits, going from 0 to 127.

« Score de charabia ».

Hypothèse : ce score pourrait servir à déclasser, voire désindexer, toute page ou autre document contenant essentiellement du texte incompréhensible, n’appartenant à aucun langage connu.

Par exemple, les textes en faux langage que certains référenceurs SEO utilisent pour tester le fonctionnement des algorithmes de Google…

Ou encore, les textes en charabia qu’utilisent les spammeurs et autres adeptes du SEO black hat, pour gratter du trafic et concentrer de l’autorité en produisant du texte automatisé par collage absurde de fragments de pages web.

toolbarPagerank (type: integer(), default: nil) – A copy of the value stored in /namespace/indexing/wwwglobal//fakepr/* for this document. A value of quality_bakery::FakeprUtils::kUnknownToolbarPagerank indicates that we don’t have toolbar pagerank for this document. A value between 0 and 10 (inclusive) means that this is the toolbar pagerank of the page. Finally, if this value is not set it means that the toolbar pagerank is equivalent to: quality_bakery::FakeprUtils::EstimatePreDemotionFromPagerankNearestSeeds( basic_info.pagerank_ns()) called on the MustangBasicInfo attachment for the same document.

« Pagerank de la toolbar ». « Une copie de la valeur stockée dans /namespace/indexing/wwwglobal//fakepr/* pour ce document. Une valeur de quality_bakery::FakeprUtils::kUnknownToolbarPagerank indique que nous n’avons pas de toolbar pagerank pour ce document. Une valeur comprise entre 0 et 10 (inclus) signifie qu’il s’agit du pagerank de la barre d’outils de la page. Enfin, si cette valeur n’est pas définie, cela signifie que le pagerank de la barre d’outils est équivalent à : quality_bakery::FakeprUtils::EstimatePreDemotionFromPagerankNearestSeeds( basic_info.pagerank_ns()) appelé sur l’attachement MustangBasicInfo pour le même document. »

Le toolbar pagerank était un outil proposé par Google, qui s’affichait dans les navigateurs jusqu’en 2013. Mais comme les référenceurs ont utilisé les valeurs de pagerank pour vendre des liens sponsorisés (pratique qui a rendu Google milliardaire, rappelons-le…), Google a gelé puis, en 2016, supprimé tout affichage de cet outil.

La mention de cet attribut dans l’API de Google fuitée en 2024, sans aucun caractère « déprecated » (obsolète) laisse penser que cette métrique serait toujours en vigueur, contrairement à ce qu’on pensait depuis son abandon en 2016.

Le mystère demeure concernant les 7 variantes de pagerank déclinées dans ce module PerDocData : à quoi sert d’avoir 4 variantes de pagerank tout court (dont une déclarée obsolète), plus un crawlPagerank, plus un toolbarPagerank ? Le seul dont on comprenne intuitivement l’utilité est le homepagePagerankNs, relatif à l’autorité du site, un pagerank au sens plus global que celui d’une page particulière donc.

freshboxArticleScores (type: integer(), default: nil) – Stores scores of freshness-related classifiers: freshbox article score, live blog score and host-level article score. The encoding/decoding API is in quality/freshness/freshbox/goldmine/freshbox_annotation_encoder.h. To use this field, you MUST join g/pq-classifiers-announce and add your use case at http://shortn/_RYXS2lX2IV.

« Scores d’article boîte fraîcheur ». « Stocke les scores des classificateurs liés à la fraîcheur : score de l’article freshbox, score du blog en direct et score de l’article au niveau de l’hôte. »

WhirlpoolDiscount (type: number(), default: nil) –

« Remise tourbillon ». Incompréhensible.

ScaledExptIndyRank3 (type: integer(), default: nil) – experimental

« Classement indépendant expérimental échelonné 3 ».

ToolBarData (type: GoogleApi.ContentWarehouse.V1.Model.ToolBarPerDocData.t, default: nil) –

« Données barre d’outil ».

Cet attribut renvoie au module ToolBarPerDocData qui n’a qu’un seul attribut, VisitorsPastDay, dont le commentaire explique : »Indique le nombre de visiteurs distincts de la barre d’outils de cette page au cours de la journée écoulée. Ne sera présent que si le nombre est raisonnablement élevé. »

Je me demande bien de quelle barre d’outil il s’agit. Google a semble-t-il créé Chrome, qui possède aujourd’hui 63% de parts de marché mondiale, en tant que mouchard universel pour capter (à notre insu) des données utiles au classement des pages et autres « documents » sur Google. Quand il est question de la Toolbar, s’agit-il de celle de Chrome ?

Par ailleurs, Google possède le système d’exploitation Android, qui ferait environ 70% de parts de marché mondiales. Par le biais d’Android, Google peut-il donc avoir accès aux données des navigateurs, et compter un « nombre de visiteurs par jour » en lien avec la barre d’outils de n’importe quel navigateur ? Je ne suis pas assez calé sur ces questions pour décider si cette interprétation serait correcte.

nsrIsElectionAuthority (type: boolean(), default: nil) – This field is propagated to shards. It will also be populated at serving time by go/web-signal-joins (see b/168114815). This field is deprecated – used the equivalent field inside nsr_data_proto instead.

« Classement de site normalisé / Est une autorité électorale ». Champ obsolète.

Cela confirme à nouveau que le NSR n’est pas une métrique (ce n’est pas un classement dans une liste, genre 1er ou 10ème), mais une typologie, et au fil des rencontres, on connait déjà au moins 3 types possibles :

  • nsrIsCovidLocalAuthority : site d’une autorité locale lors de la pandémie
  • nsrIsVideoFocusedSite : site centré sur la vidéo
  • nsrIsElectionAuthority : site d’une autorité électorale

onsiteProminence (type: integer(), default: nil) – Onsite prominence measures the importance of the document within its site. It is computed by propagating simulated traffic from the homepage and high craps click pages. It is a 13-bit int.

« Proéminence sur le site ». « La proéminence sur le site mesure l’importance du document au sein de son site. Elle est calculée en propageant un trafic simulé à partir de la page d’accueil et des pages à fort taux de clics. Il s’agit d’une valeur int. de 13 bits. »

Voilà un attribut très intéressant ! Il pourrait permettre de remettre en question la théorie de la circulation de l’autorité par le maillage interne, le pagerank et le « jus de lien ». Il y aurait bien une telle circulation d’autorité de page en page via les liens, mais pas depuis toute page d’un site mais uniquement via l’accueil et les « pages à fort taux de clics ».

Comment sont définies ces « pages à fort taux de clics » ? Sans autre information, on peut supposer d’abord – en fait, c’est quasiment sûr – que Google utilise Chrome (je le redis : il a 63% de parts de marché) pour avoir l’info sur les clics internes lors d’une visite ; et supposer ensuite que, par nature, ces clics se font en moyenne sur les principaux éléments du menu.

Pour relativiser : on n’a aucune idée du poids d’un tel attribut, de son contexte d’utilisation.

travelGoodSitesInfo (type: GoogleApi.ContentWarehouse.V1.Model.QualityTravelGoodSitesData.t, default: nil) – This field stores information about good travel sites.

Cet attribut « Info bons sites de voyage » stocke donc les « infos sur les bons sites de voyage ». Il renvoie à un module QualityTravelGoodSitesData, qui a 10 attributs.

IsAnchorBayesSpam (type: boolean(), default: nil) – Is this document considered spam by the anchor bayes classifier?

« Spam Bayes Est une ancre ». « Le document est-il considéré comme spam par le classificateur bayésien d’ancre ? »

Note : Bayes est un mathématicien anglais du 18è siècle, célèbre pour ses contributions en théorie des probabilités et en statistique.

isHotdoc (type: boolean(), default: nil) – Set by the FreshDocs instant doc joiner. See //indexing/instant/hotdocs/README and http://go/freshdocs-hotdocs.

« Est document chaud ». « Défini par le jointeur instantané de document FreshDocs ».

commercialScore (type: number(), default: nil) – A measure of commerciality of the document Score > 0 indicates document is commercial (i.e. sells something) Computed by repository/pageclassifiers/parsehandler-commercial.cc

« Score commercial ». « Une mesure de la commercialité du document Un score > 0 indique que le document est commercial (c’est-à-dire qu’il vend quelque chose) Calculé par repository/pageclassifiers/parsehandler-commercial.cc ».

A quoi peut servir cet attribut ? Peut-être, à faire correspondre les documents à l’intention de recherche déduite de la requête de l’internaute par une IA sémantique ou un LLM ?

Ainsi, une requête informationnelle tendrait à trouver des documents au faible « score commercial », tandis qu’une requête explicitement transactionnelle exigerait un « score commercial » élevé ?

En SEO, ceci pourrait avoir pour conséquence qu’un blog d’entreprise – l’entreprise ayant fondamentalement quelque chose à vendre – se devrait, lui, d’être purement informationnel pour correspondre aux requêtes informationnelles largement majoritaires ? Pour vendre, il faudrait donc avant tout ne pas vendre…

De manière amusante, on pourrait calculer ce score à toutes les pages de Google, et on établirait qu’elles ont à 100% un « score de commercialité » supérieur à 0, car Google vend toujours quelque chose – c’est la régie publicitaire mondiale numéro 1 et de très loin.

asteroidBeltIntents (type: GoogleApi.ContentWarehouse.V1.Model.QualityOrbitAsteroidBeltDocumentIntentScores.t, default: nil) – For indexing Asteroid Belt intent scores. See go/asteroid-belt for details.

« Intentions ceinture d’astéroïdes ». « Pour l’indexation des scores d’intention de la ceinture d’astéroïdes. »

L’attribut renvoie au module QualityOrbitAsteroidBeltDocumentIntentScores, littéralement : « Scores d’intention du document de la ceinture d’astéroïde de l’orbite de qualité », LOL.

Est-ce que Google se lance dans l’astrophysique, ou est-ce une représentation googlesque de l’intention de recherche ? Pourtant, l’expression laisse penser que l’intention dont il est question n’est pas celle de la requête, mais bien celle du document. Mais n’est-ce pas finalement la même chose ? Une vidéo pub aurait l’intention de vendre, tandis qu’un docu animalier aurait l’ntention d’informer ou de divertir, correspondant exactement aux intentions de recherche respectives.

TagPageScore (type: integer(), default: nil) – Tag-site-ness of a page, repesented in 7-bits range from 0 to 100. Smaller value means worse tag page.
geodata (type: String.t, default: nil) – geo data; approx 24 bytes for 23M U.S. pages

« Score de page étiquette ». Le commentaire sonne particulièrement mal écrit, il contient une faute de frappe et un énième barbarisme, le néologisme « tag-site-ness », qu’on pourrait traduire en langue barbaro-française ainsi : la site-étiquettabilité.

Un autre fragment du commentaire ne nous aide guère à comprendre : « Une valeur plus petite [de cet attribut] signifie une étiquette de page pire ». Qu’est-ce donc qu’une tag page ??

oceandata (type: GoogleApi.ContentWarehouse.V1.Model.OceanPerDocData.t, default: nil) – 28 bytes per page, only in the Ocean index

« Données Océan ». L’attribut renvoie au module OceanPerDocData, qui contient 5 attributs sans explications. On sait juste qu’Ocean est un index de Google.

pagerank0 (type: number(), default: nil) –

Encore un pagerank, déjà commenté.

SpamWordScore (type: integer(), default: nil) – The spamword score is represented in 7-bits, going from 0 to 127.

« Score de spam de mot ».

ScaledIndyRank (type: integer(), default: nil) – The independence rank is represented as a 16-bit integer, which is multiplied by (max_indy_rank / 65536) to produce actual independence rank values. max_indy_rank is typically 0.84.

« Classement indé échelonné ». « Le rang d’indépendance est représenté par un entier de 16 bits, qui est multiplié par (max_indy_rank / 65536) pour produire les valeurs réelles du rang d’indépendance. max_indy_rank est généralement de 0,84. »

Une fois de plus cet attribut est très obscur : de quelle indépendance s’agit-il, par rapport à quoi ?

bodyWordsToTokensRatioBegin (type: number(), default: nil) – The body words over tokens ratios for the beginning part and whole doc. NB: To save space, field body_words_to_tokens_ratio_total is not set if it has the same value as body_words_to_tokens_ratio_begin (e.g., short docs).
topPetacatWeight (type: number(), default: nil) –

« Début ratio mots à tokens du corps ». « Rapport entre le nombre de mots du corps et le nombre de tokens pour le début de la partie et pour l’ensemble du document. NB : Pour économiser de l’espace, le champ body_words_to_tokens_ratio_total n’est pas défini s’il a la même valeur que body_words_to_tokens_ratio_begin (par exemple, documents courts). »

Note : le body désigne évidemment l’élément <body> en HTML.

fireflySiteSignal (type: GoogleApi.ContentWarehouse.V1.Model.QualityCopiaFireflySiteSignal.t, default: nil) – Contains Site signal information for Firefly ranking change. See http://ariane/313938 for more details.

« Signal de site Firefly ». « Contient des informations sur le signal du site pour la modification du classement Firefly ».

Cet attribut renvoie au module QualityCopiaFireflySiteSignal, qui contient 15 attributs dont certains ont des noms alléchants pour un référenceur :

  • clicks
  • goodClicks
  • dataTimeSec (est-ce lié à la mesure du temps de présence / dwell time ?)
  • impressionsInBoostedPeriod (ce qui suppose qu’il existe une « période boostée »)
  • totalImpressions
  • etc

Mon intuition me dit que ce paramètre pourrait jouer un rôle important dans le reclassement d’un document en fonction de ses résultats : s’il correspond à beaucoup de requêtes, s’il reçoit beaucoup de visites de qualité ( = longues, traduisant l’intérêt du public), alors ce document – page web, image, vidéo – va monter sur la SERP ?

titleHardTokenCountWithoutStopwords (type: integer(), default: nil) – Number of hard tokens originally in title without counting the stopwords.

« Compte des tokens durs du titre sans les mots d’arrêt ». « Nombre de tokens durs à l’origine dans le titre, sans compter les mots d’arrêt. »

Note : ce qu’on appelle les stopwords, ce sont tous les mots de type articles, prépositions etc, donc si j’ai le titre « Le moteur de recherche dévoile tous ses secrets », la version sans stopwords donne « moteur recherche dévoile secrets ».

hostNsr (type: integer(), default: nil) – Site rank computed for host-level sitechunks. This value encodes nsr, site_pr and new_nsr. See quality_nsr::util::ConvertNsrDataToHostNsr and go/nsr. This field is deprecated – used the equivalent field inside nsr_data_proto instead.

« Classement normalisé de site / hôte ». « Classement du site calculé pour les morceaux de site au niveau de l’hôte. Cette valeur encode nsr, site_pr et new_nsr. Voir quality_nsr::util::ConvertNsrDataToHostNsr et go/nsr. Ce champ est obsolète – utilisez plutôt le champ équivalent dans nsr_data_proto. »

semanticDateInfo (type: integer(), default: nil) – Info is encoded using a SemanticDate specific format. Contains confidence scores for day/month/year components as well as various meta data required by the freshness twiddlers.

« Info date sémantique ». « Les informations sont encodées en utilisant un format spécifique à SemanticDate. Contient des scores de confiance pour les composants jour/mois/année ainsi que diverses métadonnées requises par les « freshness twiddlers ». »

J’ai déjà commenté ce concept de date sémantique : c’est probablement la date déclarée, affichée par le document, et susceptible d’être vraie ou mensongère.

languages (type: list(integer()), default: nil) – Plausible languages in order of decreasing plausibility. Language values are small, IE < 127 so this should compress to one byte each.

« Langages ». « Langues plausibles par ordre décroissant de plausibilité. Les valeurs des langues sont faibles, IE < 127, et devraient donc être comprimées à un octet chacune. »

GroupsData (type: GoogleApi.ContentWarehouse.V1.Model.GroupsPerDocData.t, default: nil) – 16 bytes of groups2 data: used only in groups2 index

« Données groupes ». Cet attribut renvoie au module GroupsPerDocData, qui contient 4 attributs : AuthorId, GroupGaiaId, GroupId, ThreadId – aucun n’est commenté.

countryInfo (type: GoogleApi.ContentWarehouse.V1.Model.CountryCountryAttachment.t, default: nil) – This field stores the country information for the document in the form of CountryAttachment.

« Info pays ». « Ce champ stocke les informations relatives au pays du document sous la forme de CountryAttachment. »

Note : beaucoup de pays parlent la même langue, et pourtant le pays compte dans le calcul de la pertinence, car le public attend en priorité des résultats proches de lui.

Par exemple, le français est une des langues du Bénin, mais l’internaute béninois n’a pas envie de voir ses résultats de recherche envahis par des sites français au détriment des sites béninois.

J’imagine donc que cet attribut sert à améliorer cette correspondance culturelle entre les internautes et les documents, sans interdire qu’un document lié à un pays puisse ranker dans un autre.

brainloc (type: GoogleApi.ContentWarehouse.V1.Model.QualityGeoBrainlocBrainlocAttachment.t, default: nil) – Brainloc contains location information for the document. See ariane/273189 for details.

L’attribut est impossible à traduire car ce mot n’existe pas en anglais. Il semble pourtant être composé de brain, cerveau, et loc, qui peut être un abrégé pour location (lieu) ou localization (localisation ou traduction : on dit qu’une page est « localized », adaptée à la langue et au contexte local).

Le commentaire « Brainloc contient des informations sur l’emplacement du document. » règle cette ambiguïté : ce paramètre poursuit donc probablement la même intention d’adaptation des résultats à l’internaute, dans une version plus précise : un internaute de Brest recevra en priorité des résultats créés à proximité ? En d’autres termes, cet attribut serait fortement lié à ce qu’on appelle le référencement local : si je google « boulangerie près de chez moi », Google affiche ce que je demande, et pas des boulangeries à Casablanca.

ScaledLinkAgeSpamScore (type: integer(), default: nil) – End DEPRECATED ———————————————————— Link age score is represented as a 7-bit integer, going from 0 to 127.

« Score échelonné de spam âge du lien », attribut obsolète.

ScaledExptIndyRank (type: integer(), default: nil) – DEPRECATED —————————————————————- Please do not use these fields in any new code. experimental

On a déjà croisé un équivalent et cet attribut-ci est obsolète.

shingleInfo (type: GoogleApi.ContentWarehouse.V1.Model.ShingleInfoPerDocData.t, default: nil) –

« Info bardeau ».

Un bardeau est une sorte de tuile plate qu’on utilise pour couvrir un toit.

L’attribut renvoie au module ShingleInfoPerDocData, qui est décrit ainsi : « Ce message représente des informations relatives aux bardeaux obtenues à partir d’un document. » Il n’a que 2 attributs :

  • numShingles, le nombre total de bardeaux d’un document
  • source, une liste de toutes les sources

Bilan, on n’y comprend rien.

productSitesInfo (type: GoogleApi.ContentWarehouse.V1.Model.QualityProductProductSiteData.t, default: nil) – This field stores information about product sites.

« Info sites de produits ». « Ce champ stocke des infos à propos des sites de produit. »

Qu’est-ce exactement qu’un « product site » ? Un site e-commerce, une boutique en ligne ?

spambrainDomainSitechunkData (type: GoogleApi.ContentWarehouse.V1.Model.SpamBrainData.t, default: nil) – Domain sitechunk level scores coming from spambrain.

« Données morceaux de site domaine Spambrain ». « Les scores de domaine au niveau du morceau de site provenant de Spambrain ».

voltData (type: GoogleApi.ContentWarehouse.V1.Model.IndexingMobileVoltVoltPerDocData.t, default: nil) – Contains page UX signals for VOLT ranking change. See http://ariane/4025970 for more details.

« Données Volt ». « Contient des signaux UX de page pour le changement de classement VOLT. »

L’attribut renvoie au module IndexingMobileVoltVoltPerDocData, qu’on a déjà croisé : il contient 5 attributs, liés aux performances Core Web Vitals et au https.

Le commentaire permet de supposer que VOLT fait probablement partie des Twiddlers, des modificateurs de classement.

timeSensitivity (type: integer(), default: nil) – Encoded Document Time Sensitivity signal.

« Sensibilité temporelle ». « Signal de sensibilité temporelle du document codé. »

Aucune idée sur ce que cette sensibilité peut signifier concrètement.

servingTimeClusterIds (type: GoogleApi.ContentWarehouse.V1.Model.IndexingDocjoinerServingTimeClusterIds.t, default: nil) – A set of cluster ids which are generated in Alexandria and used to de-dup results at serving time.

« Ids de cluster temps de service ». « Un ensemble d’identifiants de clusters générés à Alexandria et utilisés pour dédupliquer les résultats au moment du service. »

Note : j’ai encore rien compris, mais mes lectures de divers modules m’ont rendu conscient du fait que Google adore tout découper en morceaux et regrouper. La doc de l’API cite en effet de nombreuses fois des concepts comme « chunk » (morceau), « regions » (zones, régions), « groups » (groupes) et « cluster » (grappe, groupe).

Conclusion : que nous apprend le module PerDocData sur le fonctionnement de Google ?

A priori, ce module me semble central et stratégique. Il établit une très longue liste d’attributs des documents, c’est-à-dire principalement de pages web, mais aussi de vidéos et d’images.

Il concentre des données en provenance de dizaines d’autres modules de petite taille.

Il contient de nombreuses mentions des concepts de pagerank et de spam score, ce qui confirme probablement que ce module sert effectivement à rassembler des données utiles au classement.

Je vais laisser reposer, essayer de faire relire mon article par d’autres personnes et en discuter, puis relire mon article et faire une synthèse plus complète d’ici quelques jours.

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

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