annuaire-shopify

Reconnaître un site Shopify : 4 signatures techniques

Comment identifier en 30 secondes qu'un domaine tourne sous Shopify, avec des commandes reproductibles. 4 signatures à croiser (en-têtes HTTP, endpoint /products.json, DOM, CDN) et bonus identification de la stack secondaire (Plus, Klaviyo, Judge.me, Recharge, Yotpo).

Pourquoi détecter Shopify

Reconnaître qu’un domaine tourne sous Shopify est un préalable à la plupart des flux B2B autour de l’écosystème e-commerce : c’est la première colonne d’une fiche prospect, le premier filtre d’un script d’enrichissement, le premier signal qu’évalue un investisseur e-commerce.

Trois cas d’usage récurrents :

  • Le commercial e-commerce qui qualifie une liste de 500 marchands sortie d’Apollo, avant d’envoyer une séquence Lemlist qui pitche précisément un connecteur Shopify.
  • Le développeur d’outil B2B qui enrichit son CRM avec un booléen « est sur Shopify ». Sans ce signal, sa segmentation est aveugle.
  • Le conseiller fusion-acquisition e-commerce qui constitue une liste large de cibles d’acquisition, avec Shopify Plus comme filtre suivant pour distinguer les cibles haut de gamme.

Reconnaître Shopify côté visuel n’est pas fiable : les thèmes payants personnalisent l’expérience au point de masquer la plateforme, et un site qui ressemble à un Shopify peut tourner sous WooCommerce, Magento ou un Hydrogen découplé servi par Vercel.

La méthode ici repose sur 4 signatures techniques objectives, croisables en moins de 30 secondes avec curl ou un onglet inspecteur. Aucune ne dépend d’un outil payant. Vous pouvez les tester depuis un terminal sur n’importe quel domaine pendant la lecture.

Signature 1 : les en-têtes HTTP

C’est la signature la plus rapide à tester. Shopify ajoute plusieurs en-têtes identifiables sur la réponse HTTP du domaine principal :

  • X-Shopify-Stage (souvent production)
  • X-ShopId (identifiant numérique interne du marchand)
  • X-Shopify-Shop-Api-Call-Limit (présent sur les endpoints API mais parfois exposé côté frontal)
  • Server contenant cdn.shopify.com ou la mention shopify

Commande de test :

curl -sI https://example.com | grep -i shopify

Sur une boutique Shopify standard, vous obtenez quelque chose comme :

x-shopify-stage: production
x-shardid: 51
x-shopid: 12345678
x-request-id: a1b2c3d4-e5f6-...
x-storefront-renderer-rendered: 1
server: cdn.shopify.com

Sur un site non-Shopify, le grep ne renvoie rien.

Précisions :

  • Les boutiques en mode password renvoient quand même les en-têtes Shopify : la signature reste fiable même quand le site public est verrouillé.
  • Un proxy personnalisé devant Cloudflare peut masquer une partie des en-têtes. Si seul server: cdn.shopify.com est visible, c’est déjà suffisant.
  • L’en-tête x-storefront-renderer-rendered est absent sur les architectures Hydrogen.

Signature 2 : l’endpoint /products.json

Shopify expose nativement un endpoint JSON qui liste les produits d’une boutique : /products.json. C’est la signature la plus utilisée par les outils d’identification (Wappalyzer, BuiltWith) parce qu’elle est canonique et que sa présence ne peut pas être un hasard.

Commande de test :

curl -s https://example.com/products.json | head -c 200

Sortie attendue sur une boutique Shopify avec catalogue public :

{"products":[{"id":7491234567890,"title":"Bougie parfumée 200g","handle":"bougie-200g","body_html":"<p>...</p>","vendor":"Atelier Marseille",...

L’endpoint supporte aussi la pagination via ?page=N (50 produits par page par défaut, jusqu’à 250 via ?limit=250) :

curl -s "https://example.com/products.json?page=2&limit=50" | jq '.products | length'

Cas particuliers à anticiper :

  • Mode password : la boutique renvoie 401 Unauthorized ou redirige vers /password. Un 401 sur /products.json accompagné d’en-têtes Shopify suggère un Shopify en pré-lancement.
  • B2B verrouillé : sur certaines boutiques Plus B2B, l’endpoint nécessite une session client et renvoie {"products": []}. La structure JSON valide reste un signal.
  • Découplé (Hydrogen) : un magasin Next.js / Remix avec domaine personnalisé peut renvoyer un 404 du framework. Croiser avec CDN et en-têtes.

C’est cette signature qui sert à constituer la base de 70 000 boutiques Shopify uniques.

Signature 3 : structure DOM et signatures HTML

Côté HTML rendu, plusieurs marqueurs caractéristiques apparaissent sur quasiment toutes les boutiques Shopify, hors architectures découplées complètes :

  • L’objet JS global window.Shopify : initialisé au chargement, contient Shopify.shop, Shopify.locale, Shopify.currency.
  • Les balises <script src="//cdn.shopify.com/..."> : les ressources JS et CSS sont servies depuis ce CDN. Quasi-systématique.
  • Le flux atom des articles de blog : <link rel="alternate" type="application/atom+xml" href="/blogs/news.atom">.
  • Les classes CSS préfixées shopify-section : la structure du thème Liquid encapsule chaque section éditeur dans une <div class="shopify-section ...">.

Commande de test :

curl -s https://example.com | grep -Eo 'cdn\.shopify\.com|window\.Shopify|shopify-section|/blogs/[^"]+\.atom' | sort -u

Sur un site Shopify, la sortie liste 3 à 4 patterns distincts. Sur un site non-Shopify, le grep ne renvoie rien.

Pour une vérification visuelle : ouvrir la console développeur et taper Shopify (sans guillemets). Si l’objet existe, vous obtenez {shop: "...", locale: "fr", currency: {...}, ...}. Si non, Uncaught ReferenceError: Shopify is not defined.

Limites connues : sur Hydrogen, window.Shopify n’existe pas côté frontal. Les blocs d’application ou scripts d’A/B test peuvent injecter des balises qui correspondent aussi côté concurrent (Webflow, Wix). Toujours croiser avec une autre signature.

Signature 4 : CDN et ressources

Shopify possède plusieurs domaines CDN qui apparaissent systématiquement dans le HTML rendu :

  • cdn.shopify.com (le CDN historique)
  • cdn.shopifycdn.net (variante CDN, quelques cas)
  • shopifycdn.com (ressources de la boutique d’applications)
  • shop.app (Shop Pay, signature complémentaire)

Commande de test :

curl -s https://example.com | grep -Eo '(cdn\.shopify\.com|cdn\.shopifycdn\.net|shopifycdn\.com|shop\.app)/[^"]+' | sort -u | head -20

Sortie typique :

cdn.shopify.com/s/files/1/0123/4567/files/logo.png
cdn.shopify.com/s/files/1/0123/4567/products/bougie.jpg
shop.app/checkout/web/...

Le pattern /s/files/1/XXXX/YYYY/... est canonique : XXXX/YYYY est un identifiant de magasin Shopify découpé. Le voir dans le HTML est une signature très forte.

Robustesse : c’est la signature la plus difficile à masquer. Même avec checkout personnalisé ou proxy frontal personnalisé, les images restent servies via cdn.shopify.com. C’est la signature qu’on garde quand /products.json renvoie un 404 et que les en-têtes sont masqués par Cloudflare.

Croiser les 4 signatures pour minimiser les faux positifs

Aucune signature seule n’est suffisante en production. Voici le tableau de décision à appliquer sur chaque domaine scanné :

En-têtes Shopify /products.json valide DOM Shopify CDN Shopify Verdict
Oui Oui Oui Oui Shopify standard (95 % des cas)
Oui 401 / 200 vide Oui Oui Shopify en password / B2B fermé
Non / partiel Non Partiel Oui Shopify Hydrogen / découplé probable
Non Non Oui Partiel À investiguer (proxy personnalisé ?)
Non Non Non Oui Lien vers une ressource Shopify externe
Non Non Non Non Pas Shopify

La règle pratique : 2 signatures positives sur 4 = Shopify confirmé. Une seule signature n’est jamais suffisante.

Bonus : détecter Shopify Plus

Aucune signature côté frontal ne garantit Shopify Plus à 100 %. C’est une offre commerciale, pas un produit techniquement séparé. Les signaux faibles concordants :

  • Checkout personnalisé : URL du checkout en checkout.example.com au lieu de example.myshopify.com/checkouts/.... Le signal le plus distinctif.
  • Thèmes premium : Prestige, Custom, Symmetry, Impact, Focal, Empire. Corrèle fortement avec Plus sans le garantir.
  • Applications natives Plus : Script Editor, Launchpad, Shopify Flow.
  • Multi-magasins Markets avec plusieurs domaines pointant le même back-end.
  • Volume catalogue : > 10 000 références est un proxy de taille marchande probablement sur Plus.

Notre page Shopify Plus France documente la méthodologie complète.

Bonus : détecter Klaviyo, Judge.me, Recharge, Yotpo

La stack secondaire d’une boutique Shopify (email marketing, avis clients, abonnements) est plus simple à identifier que Shopify Plus, parce que chaque application charge un script identifiable. Voici les patterns reproductibles :

Klaviyo (email marketing) :

curl -s https://example.com | grep -Eo 'static\.klaviyo\.com|cdn\.klaviyo\.com|klaviyo\.js' | sort -u

La présence de <script src="https://static.klaviyo.com/onsite/js/klaviyo.js"> est un signal fiable.

Judge.me (avis clients) :

curl -s https://example.com | grep -Eo 'cdn\.judge\.me|jdgm-widget|judgeme' | sort -u

Les classes CSS jdgm-widget, jdgm-rev-widg, jdgm-prev-badge sont très spécifiques.

Recharge (abonnements) :

curl -s https://example.com | grep -Eo 'static\.rechargecdn\.com|recharge-' | sort -u

Yotpo (avis clients haut de gamme) :

curl -s https://example.com | grep -Eo 'cdn\.yotpo\.com|staticw2\.yotpo\.com|yotpo-' | sort -u

Précision sur les faux négatifs : certaines boutiques chargent ces scripts conditionnellement (consentement cookies, A/B test, chargement différé). Une seule requête curl peut manquer un script chargé par JS post-chargement. Pour une identification exhaustive, il faut un navigateur sans interface (Puppeteer / Playwright) qui exécute le JS et capture le DOM final.

Cas particulier : Hydrogen et architectures découplées

Une minorité des boutiques Shopify n’ont pas de thème Liquid détecté. Ce segment couvre majoritairement les marchands en architecture découplée : Shopify Hydrogen servi par Oxygen ou Vercel, Next.js + Storefront API, Gatsby ou Nuxt avec couche commerce.

Comportement des 4 signatures sur ce segment :

  • En-têtes HTTP : majoritairement absents côté domaine personnalisé. Le checkout redirige vers *.myshopify.com et expose les en-têtes à ce moment.
  • /products.json : généralement 404 sur le domaine personnalisé.
  • DOM : window.Shopify et shopify-section absents. Reste parfois le flux atom du blog.
  • CDN : cdn.shopify.com reste visible pour les images, même si le HTML est servi par Vercel. C’est cette signature qui sauve l’identification.

Sur Hydrogen, la méthode « 4 signatures » devient « 1 ou 2 signatures » (CDN + parfois flux atom). Pour distinguer une boutique Hydrogen d’un Next.js commerce sur autre plateforme, observer le checkout est décisif : un Hydrogen finit toujours en checkout Shopify.

Outils tiers utilisables

Si vous ne voulez pas écrire vos propres scripts, plusieurs outils tiers exposent ces signatures dans une interface :

  • Wappalyzer (extension navigateur, version gratuite) — détecte Shopify et la stack secondaire (Klaviyo, Judge.me, Recharge, Yotpo). Fiable, mis à jour, gratuit pour un usage interactif.
  • BuiltWith (application web + extension) — couverture plus large que Wappalyzer.
  • Whatruns (extension navigateur) — alternative gratuite.
  • Shopify Theme Detector (sites tiers gratuits) — utile pour identifier le thème Shopify précis.

Pour des volumes au-delà de quelques dizaines de domaines, ces outils interactifs deviennent inutilisables.

Voir aussi

← Retour au panorama des guides · Tester gratuitement · Voir les tarifs

Décision simple

Vous voulez tester sur votre cible ?

Recevez 10 fiches d’exemple, sans carte bancaire, puis passez au CSV ou Pro si la donnée colle à votre marché.