# Commandes Shopify avec ChatGPT comme source : comment lire cette étiquette

> Shopify déduit la source d'une commande du référent et de la page d'atterrissage. Ce que cela prouve, pourquoi elle disparaît, comment la réconcilier.

Canonical: https://convrail.com/fr/blog/commandes-shopify-source-chatgpt/

L'étiquette de source d'une commande Shopify est déduite, pas déclarée : elle vient du référent et de la page d'atterrissage de la session qui a passé la commande, exposés dans l'API sous `referring_site`, `landing_site` et le parcours client. Elle prouve que la session a commencé par un lien ChatGPT. Elle ne dit pas, à elle seule, si ce lien était une publicité, et elle disparaît avec le référent.

## D'où vient l'étiquette

Shopify enregistre deux faits sur la visite qui a produit une commande. La [ressource Order de l'API REST](https://shopify.dev/docs/api/admin-rest/latest/resources/order) définit `landing_site` comme « The URL for the page where the buyer landed when they entered the shop. » et `referring_site` comme « The website where the customer clicked a link to the shop. » La même page fait correspondre les deux à leurs équivalents GraphQL sur l'objet `CustomerVisit`, `landingPage` et `referrerUrl`, et marque comme obsolètes les anciens champs `landingPageUrl` et `referrerUrl` portés directement par l'objet GraphQL `Order`.

L'[objet CustomerVisit](https://shopify.dev/docs/api/admin-graphql/latest/objects/CustomerVisit) est l'endroit où vit le tableau le plus riche. Shopify le décrit comme « A customer's session on the online store. Tracks how the Customer arrived at the store, including the landing page, referral source, and any associated marketing campaigns. » Ses champs sont la matière première de toute étiquette de source que vous verrez jamais dans l'administration :

| Champ | Définition de Shopify | Ce qu'il vous dit sur ChatGPT |
| --- | --- | --- |
| `landingPage` | « URL of the first page the customer landed on for the session. » | Si l'URL portait `oppref` ou des paramètres UTM |
| `referrerUrl` | « Webpage where the customer clicked a link that sent them to the online store. » | Si le clic venait de chatgpt.com |
| `source` | « Source from which the customer visited the store, such as a platform (Facebook, Google), email, direct, a website domain, QR code, or unknown. » | La classification que Shopify fait lui-même de ce référent |
| `utmParameters` | « A set of UTM parameters gathered from the URL parameters of the referrer. » | Tout ce que vous ou un générateur de liens avez ajouté |
| `referralCode` | « Marketing referral code from the link that the customer clicked to visit the store. Supports the following URL attributes: ref, source, or r. » | Rarement pertinent pour le trafic ChatGPT |
| `occurredAt` | « The date and time when the customer's session occurred. » | À quelle distance le clic se situe de la commande |

Les visites sont regroupées par commande dans le [CustomerJourneySummary](https://shopify.dev/docs/api/admin-graphql/latest/objects/CustomerJourneySummary), qui « Tracks session data, attribution sources, and the timeline from first visit to purchase conversion. » Il expose un `firstVisit` (« The customer's first session going into the shop. »), un `lastVisit` (« The last session before an order is made. »), un `daysToConversion` et un `momentsCount`. L'[objet Order](https://shopify.dev/docs/api/admin-graphql/latest/objects/Order) résume l'ensemble comme « The customer's visits and interactions with the online store before placing the order. »

Un champ souvent confondu avec la source est `source_name`. Il ne parle pas de trafic. Shopify le définit ainsi : « The source channel that the order is attributed to. Set this to the handle of an order attribution definition configured for your sales channel app, such as `youtube` or `channel:amazon-us`. » Pour une commande ordinaire de la boutique en ligne, il vaut `web`, quelle que soit la manière dont l'acheteur est arrivé. Si vous filtrez les commandes par `source_name` en espérant trouver ChatGPT, vous regardez la mauvaise colonne.

## Pourquoi le référent a souvent disparu au moment du passage en caisse

Le référent est un en-tête de navigateur. Il est présent sur la requête qui suit un clic, quand le site d'origine et le navigateur autorisent tous deux son envoi, et il est capturé une fois pour la session. Rien de lui ne survit à un changement de session.

C'est pourquoi le même acheteur peut produire deux commandes très différentes. Quelqu'un qui lit une réponse de ChatGPT, clique sur le lien produit et achète dans la foulée laisse un `referrerUrl` sur chatgpt.com et une `landingPage` qui porte peut-être encore des paramètres. Quelqu'un qui lit la même réponse, ferme l'onglet et revient le soir en tapant votre domaine ouvre une nouvelle session dont Shopify ne peut enregistrer la source que comme « direct » ou « unknown », les deux valeurs fourre-tout de sa propre définition de `source`. La recommandation a eu lieu ; la preuve n'a pas voyagé.

Il y a aussi un détail de synchronisation à connaître si vous consommez les commandes par webhook. Le `CustomerJourneySummary` possède un champ `ready`, « Whether the attributed sessions for the order have been created yet. », et son `momentsCount` « Returns null if the order is still in the process of being attributed. » Shopify assemble le parcours après que la commande existe. Un connecteur qui lit le parcours à l'instant où le webhook `orders/paid` se déclenche peut voir un tableau inachevé ; lire `landing_site` et `referring_site` sur la commande elle-même, et revérifier le parcours plus tard, est le schéma le plus sûr.

## Ce que prouvent `oppref` et les paramètres UTM

Le référent vous dit d'où venait le clic. Les paramètres de l'URL d'atterrissage vous disent de quel type de clic il s'agissait.

Le signal le plus fort est `oppref`. La [référence Measurement Pixel d'OpenAI](https://developers.openai.com/ads/measurement-pixel) indique que le pixel « captures `oppref` from the landing page URL » et « stores `oppref` in a first-party `__oppref` cookie so later page views can reuse it. » La [référence Conversions API](https://developers.openai.com/ads/conversions-api) décrit la même valeur comme « An opaque, OpenAI-provided attribution identifier. » Elle est ajoutée par ChatGPT Ads à l'URL d'atterrissage d'un clic publicitaire, et par rien d'autre. Quand `landing_site` contient `oppref=<id>`, la session a commencé par un clic payant, point final. Parce qu'il se trouve dans l'URL, Shopify l'enregistre que l'en-tête referrer soit passé ou non.

Les paramètres UTM sont plus faibles parce que n'importe qui peut les écrire. Ils prouvent qu'un lien portant ces paramètres a été cliqué ; ils ne prouvent rien sur qui a construit le lien. Si les URL de votre flux incluent un medium de votre choix (les bonnes pratiques de flux d'OpenAI recommandent d'ajouter au champ `url` des paramètres propres au flux tels que `utm_medium=feed`), un `utm_source=chatgpt` accompagné de ce medium est une bonne preuve d'un résultat produit organique. Nous n'avons trouvé aucune page officielle d'OpenAI documentant un jeu fixe de paramètres UTM ajoutés aux liens organiques de ChatGPT ; traitez donc tout UTM que vous n'avez pas posé vous-même comme informatif plutôt que comme faisant autorité.

Le référent, enfin, prouve un clic depuis chatgpt.com, chat.openai.com ou openai.com, sans dire si la surface était une publicité ou un résultat organique. À lui seul, il doit se lire comme organique, parce que les clics payants portent `oppref` et auraient déjà été reconnus sur ce premier critère.

## La table de décision de Convrail, et pourquoi l'ordre des lignes compte

Convrail applique une table de décision fixe à chaque commande et enregistre, à côté de l'attribution, la règle qui s'est déclenchée ainsi que la valeur qui a correspondu. La première ligne qui correspond l'emporte.

| Signal sur la commande | Verdict | Medium |
| --- | --- | --- |
| L'URL d'atterrissage contient `oppref=<id>` | ChatGPT | ads |
| `utm_source` vaut chatgpt, openai ou chatgpt.com, et `utm_medium` vaut cpc, ppc, paid ou ads | ChatGPT | ads |
| `utm_source` vaut chatgpt, openai ou chatgpt.com, tout autre medium | ChatGPT | organic |
| Le référent est chatgpt.com, chat.openai.com ou openai.com (ou un sous-domaine) | ChatGPT | organic |
| Aucun des cas ci-dessus | Autre canal | non attribué |

L'ordre encode la fiabilité. `oppref` est vérifié en premier parce que c'est le seul signal qui ne peut être produit par rien d'autre qu'un clic ChatGPT Ads ; une commande payante n'est donc jamais rétrogradée en organique quand le référent a été retiré ou que l'acheteur a effacé ses cookies. Les UTM payants viennent en deuxième parce qu'ils sont délibérés, même s'ils sont falsifiables. Le référent vient en dernier parce qu'il est le plus fragile et le moins spécifique.

La preuve est ce qui rend la table auditable. Chaque commande attribuée dans Convrail porte trois choses : le medium (ads ou organic), la méthode (quelle ligne a correspondu) et la preuve (la valeur `oppref` réelle, la paire UTM ou l'hôte du référent). L'export CSV comprend les mêmes colonnes, si bien qu'un marchand ou une agence peut redériver chaque attribution à partir des champs bruts sans faire confiance à l'étiquette. C'est le même principe que sur la page produit consacrée à l'[attribution](/fr/attribution/) : un chiffre ne vaut d'être lu que si l'on peut voir la règle qui l'a produit.

Convrail lit ces signaux tels que votre plateforme les a enregistrés sur la commande. Sur Shopify, ce sont `landing_site` et `referring_site` issus du webhook de commande ; le web pixel conserve aussi `oppref` dans le cookie first-party pendant 7 jours pour que l'identifiant atteigne les événements de conversion envoyés à OpenAI, ce qui fait que l'Ads Manager et votre tableau de bord finissent par décrire le même clic.

## Réconcilier avec l'Ads Manager

Les marchands qui comparent les commandes étiquetées ChatGPT dans Shopify avec la colonne des conversions de l'Ads Manager trouvent généralement deux nombres qui divergent. Les deux peuvent être justes, parce qu'ils comptent des choses différentes.

L'Ads Manager compte les conversions attribuées à des clics publicitaires. La [référence Insights](https://developers.openai.com/ads/api-reference/insights) indique que « `conversions` is always equal to `click_through_conversions`; view-through conversions are a separate, supplemental metric and are not added to that total », et que « Click-through attribution follows the applicable configured click window. » Une conversion y apparaît quand un événement `order_created` portant un `oppref` correspondant a atteint OpenAI, depuis le pixel ou la Conversions API, à l'intérieur de la fenêtre.

L'étiquette de Shopify compte les sessions dont le référent ou la page d'atterrissage pointait vers ChatGPT, payant ou organique, sans aucune fenêtre et sans se soucier qu'un événement ait jamais atteint OpenAI.

La réconciliation est donc une soustraction, pas une chasse au bogue :

1. Partez des commandes attribuées par Convrail sur la période, réparties par medium.
2. Retirez les lignes organiques. L'Ads Manager ne les a jamais comptées.
3. Parmi les lignes ads, attendez-vous à une correspondance pour chaque commande dont l'événement `order_created` a été envoyé dans la fenêtre de clic et accepté. Les commandes passées après la fenêtre, celles dont les événements ont été retenus pour cause de consentement, et celles passées sur un appareil où le cookie `__oppref` était absent figureront dans Convrail (l'URL d'atterrissage suffit comme preuve) mais pas dans l'Ads Manager.
4. Ce qui reste inexpliqué mérite une enquête : une commande avec `oppref` dans l'URL d'atterrissage, dans la fenêtre, avec un événement accepté, et aucune conversion dans l'Ads Manager, pointe vers un trou de suivi. Les modes de défaillance sont décrits dans [Optimisation des conversions ChatGPT Ads](/fr/blog/optimisation-conversions-chatgpt-ads/).

Deux réserves. Convrail date une commande par son horodatage de commande, tandis que l'Ads Manager rapporte selon ses propres conventions ; les comparaisons au jour dériveront donc aux bords. Comparez sur une semaine plutôt que sur un jour. Et le chiffre de conversions de l'Ads Manager est un décompte d'événements, alors que Shopify compte des commandes ; si votre pipeline a un jour envoyé une commande sous deux identifiants, c'est le côté Ads Manager qui sera gonflé.

## Ce que l'attribution ne peut pas prouver

Une étiquette de source, aussi soigneusement déduite soit-elle, est une observation first-party au dernier contact. Elle répond à « de quel lien cette session est-elle partie ? », et à cela seulement.

Elle ne voit pas l'acheteur qui a demandé une comparaison à ChatGPT, s'est laissé convaincre, et a cherché votre marque sur Google une heure plus tard. Cette commande se lira Google, et ce sera exact comme énoncé sur la session tout en manquant la cause. Elle ne voit pas l'acheteur qui a lu la réponse sur un téléphone et acheté sur un ordinateur portable. Elle ne distingue pas un lien ChatGPT transféré dans une discussion de groupe d'un clic à l'intérieur de ChatGPT, sauf si l'URL portait un paramètre.

Elle ne vaut aussi que ce que vaut l'enregistrement de la plateforme. Shopify stocke la page d'atterrissage et le référent envoyés par le navigateur ; si une chaîne de redirections, un outil de consentement ou une application a réécrit l'URL avant que Shopify la voie, la preuve est ce qui a survécu. Convrail ne comble pas ces trous avec des chiffres modélisés. Il rapporte ce qu'il peut prouver, étiquette chaque commande attribuée avec sa méthode, et vous laisse la pondération. La façon de lire ensuite ensemble les moitiés organique et payante, définition du ROAS comprise, fait l'objet de [ChatGPT organique ou ChatGPT Ads](/fr/blog/chatgpt-organique-vs-chatgpt-ads-attribution/).

## Erreurs fréquentes

- Filtrer les commandes par `source_name` pour trouver le trafic ChatGPT. Ce champ nomme le canal de vente (`web`, `pos`, une application de canal), jamais le référent.
- Lire un référent chatgpt.com comme la preuve d'une publicité. Sans `oppref`, la session doit être traitée comme organique.
- Lire le parcours au moment du webhook et traiter un `momentsCount` nul comme « aucune visite ». Shopify peut encore être en train d'attribuer la commande ; vérifiez `ready`.
- Comparer une seule journée de commandes Shopify à une seule journée de conversions Ads Manager et conclure qu'un des deux côtés est cassé.
- Retirer les paramètres de requête des URL d'atterrissage avant de les stocker, par souci de propreté, et perdre `oppref` avec eux.
- Faire confiance à des UTM que vous n'avez pas créés comme s'il s'agissait d'identifiants émis par la plateforme.

## Et maintenant

Si votre administration Shopify affiche des commandes ChatGPT et que vous voulez savoir lesquelles vous avez payées, avec la preuve par commande et un CSV pour la vérifier, commencez par [l'attribution Convrail](/fr/attribution/).