InfraGuard

Statistiques de visiteurs et de recherche

Consultez l’analyse des visiteurs GA4 et le trafic de recherche Search Console directement depuis la carte d’un site web, à l’aide d’un compte de service enregistré par site avec son association de propriété.

Vue d’ensemble — à quoi cela sert

Deux icônes se trouvent à côté du nombre de visiteurs uniques sur chaque carte de Service ▸ Web, et chacune ouvre une fenêtre modale.

Icône Fenêtre Source
Personnage Analyse des visiteurs Google Analytics 4 (Analytics Data API)
Loupe Trafic de recherche Google Search Console (Search Analytics API)

Là où les informations d’accès nginx_meta_ct de la carte vous disent ce que votre serveur a reçu, ces deux fenêtres vous disent d’où venaient les visiteurs et quels termes de recherche les ont amenés — des informations que vos journaux de serveur ne contiennent tout simplement pas.

Ce que fait Site Kit sous WordPress revient au fond à construire les requêtes de rapport à votre place. Sous Laravel, vous les construisez vous-même et obtenez des chiffres identiques : nous n’utilisons donc ni extension ni google/apiclient — tout le travail consiste à « signer un JWT avec la clé privée, puis l’échanger contre un jeton d’accès », et le serveur le signe nativement. Traîner un vaste arbre de dépendances pour atteindre deux points de terminaison REST est un mauvais calcul.

Quand l’utiliser

Disposition

Les deux fenêtres se répartissent en onglets Aperçu / Mots-clés / Trafic (l’onglet Mots-clés n’existe que dans la fenêtre de recherche) : on change d’onglet plutôt que de faire défiler. Le sélecteur de période propose 7 / 28 / 90 jours — exactement l’ensemble autorisé côté serveur.

Analyse des visiteurs (GA4)

Canal et source ne sont pas la même chose. Le canal est la réponse regroupée (Organic Search) ; la source est la réponse concrète (google, naver, github.com). Pour les sites coréens en particulier, naver ou google, ce sont deux histoires d’acquisition entièrement différentes.

Trafic de recherche (Search Console)

La position moyenne est pondérée par les impressions. Une simple moyenne laisse une impression en position 1 compenser dix mille impressions en position 40, ce qui flatte gravement le chiffre.

Comment le configurer

1. Créer un compte de service (Google Cloud)

  1. Google Cloud Console → choisissez ou créez un projet → IAM et administration ▸ Comptes de service → Créer un compte de service. Aucun rôle au niveau du projet n’est requis.
  2. Ouvrez le compte → Clés → Ajouter une clé ▸ Créer une clé ▸ JSON → téléchargez le fichier.
  3. Sous API et services ▸ Bibliothèque, activez Google Analytics Data API et Google Search Console API.

2. L’enregistrer dans InfraGuard

Dans Service ▸ Web ▸ Gérer les sites web ▸ onglet d’édition du site, sous Intégration Google :

Champ Valeur Où le trouver
ID de propriété GA4 chiffres uniquement (p. ex. 550688232) Administration GA4 ▸ Détails de la propriété, ou l’URL #/a<account>p<property>/ — la partie après p
Propriété Search Console sc-domain:example.com ou https://example.com/ exactement la chaîne affichée dans le sélecteur de propriétés de Search Console
JSON du compte de service collez l’intégralité du fichier téléchargé —

L’ID de propriété GA4 n’est pas l’ID de compte. Dans #/a405285491p550688232/, la partie après a est le compte et la partie après p est la propriété. Google ne distingue délibérément pas « propriété inexistante » de « pas d’autorisation » (l’existence même d’une propriété est une information) : un mauvais numéro ressemble donc exactement à un problème de droits. Vérifiez d’abord l’ID de propriété.

Ne déduisez jamais la propriété Search Console du domaine. Seule la personne qui a fait la validation sait s’il s’agit d’une propriété de domaine (sc-domain:) ou d’un préfixe d’URL (https://…/), et un mauvais choix renvoie un résultat vide plutôt qu’une erreur.

3. Inviter le compte de service sur chaque propriété

Le JSON n’est qu’une identité ; l’accès est accordé propriété par propriété. Copiez le client_email affiché après l’enregistrement, puis :

Propriété Où Rôle
GA4 Administration ▸ Gestion de l’accès à la propriété ▸ + Lecteur
Search Console Paramètres ▸ Utilisateurs et autorisations ▸ Ajouter un utilisateur Complet

Dans GA4, il s’agit de la gestion de l’accès à la propriété, et non de la gestion de l’accès au compte (la colonne de gauche est le compte, celle du milieu la propriété). Dans Search Console, il faut Complet et non Restreint — la Search Analytics API refuse les utilisateurs restreints. Les comptes de service n’ont pas de boîte de réception : décochez donc la case « notifier par e-mail ».

4. Tester la connexion

[Tester la connexion], dans la fenêtre de gestion, interroge une fois chaque API (7 derniers jours) avec l’identifiant enregistré et rend compte de chaque partie séparément.

État Signification
ok Google a répondu. Zéro ligne reste un ok — un site récent et le retard de GSC ne sont pas des erreurs
fail La formulation de Google elle-même, plus le client_email à inviter
skip Aucune propriété configurée, l’étape a donc été ignorée (ce n’est pas un échec)

Sans aucun identifiant, rien n’est appelé (zéro requête sortante). Les modifications non enregistrées ne sont pas testées — enregistrez d’abord.

Règles d’exactitude — pourquoi les chiffres sont construits ainsi

Elles suivent les pièges que Site Kit a déjà mis en évidence, tous étayés par des faits.

Règle Raison
La fenêtre se termine hier Aujourd’hui n’est agrégé que partiellement : l’inclure fait toujours s’effondrer le bord droit
GA4 lit totals[0] issu de metricAggregations:['TOTAL'] Additionner des lignes soumises à un limit sous-estime le chiffre de tête
Un filtre de liste hostName sur chaque requête GA4 Une propriété couvre souvent plusieurs hôtes : sans lui, la carte affiche tout le trafic de la propriété. Nous transmettons tous les domaines que possède le service (principal, supplémentaires, www) pour correspondre exactement à l’agrégation vts de la carte
Les classements utilisent keepEmptyRows:false + notExpression{emptyFilter} Le (not set) de GA4 devance couramment de vraies villes et de vraies sources
Les séries temporelles utilisent keepEmptyRows:true Une journée sans trafic ne doit pas disparaître de l’axe
GSC utilise dataState:'all' ainsi qu’un retard d’environ 2 jours Sans cela, les jours les plus récents se lisent à zéro, ce qui ressemble à un effondrement du trafic
Les propriétés de domaine sont cadrées par page contains sc-domain: couvre tous les sous-domaines : les mots-clés des sites voisins s’y glissent

Sources de données

Cible Connexion / emplacement Rôle
infr_web_service.ga4_property_id · gsc_site_url default (000771) association de propriété par site
infr_web_service.google_cred_enc · google_cred_email default (000772) compte de service par site (Crypt, écriture seule)
Analytics Data API properties/{id}:runReport externe rapports de visiteurs
Search Console searchAnalytics/query externe rapports de trafic de recherche

Services : Services\Google\{GoogleTokenService, GoogleReportService, SiteInsightService} ; points de terminaison Service\WebController@insight{Visitors,Search,Test}.

Mise en cache : les réponses des rapports sont mises en cache, et la clé de cache inclut l’identité qui agit (client_email). La même URL et le même corps demandés sous un autre compte constituent une autre autorisation : partager une clé reviendrait à livrer à un site la réponse mise en cache d’un autre.

Pourquoi les identifiants sont par site

Une unique clé globale dans .env ne peut pas fonctionner ici. Les sites enregistrés appartiennent à des propriétaires différents, donc à des comptes Google différents, et un compte de service ne lit que les propriétés sur lesquelles il a été invité — dès que les sites de deux clients sont enregistrés, l’un au moins échoue systématiquement. D’où le champ à coller site par site.

Le champ d’identifiant n’est transmis que si vous y touchez. Le formulaire ne reçoit jamais la clé privée en retour : traiter « absent » comme « effacer » supprimerait donc l’identifiant chaque fois que quelqu’un ne modifie que la remarque. Le vider explicitement est le seul moyen de le supprimer.

Autorisations

La cible est désignée uniquement par l’id du site enregistré — un ID de propriété ne peut pas être passé en paramètre. Si l’appelant pouvait nommer une propriété, les autorisations de notre compte de service deviendraient un moyen de lire les propriétés GA4/Search Console d’autrui (la même discipline anti-SSRF que les tests en direct du Catalogue). La période est de même restreinte côté serveur à 7/28/90.

Dépannage · FAQ

Voir aussi

순 방문자 옆의 방문자 · 검색 아이콘
순 방문자 옆의 방문자 · 검색 아이콘