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(souventproduction)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)Servercontenantcdn.shopify.comou la mentionshopify
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
passwordrenvoient 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.comest visible, c’est déjà suffisant. - L’en-tête
x-storefront-renderer-renderedest 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 renvoie401 Unauthorizedou redirige vers/password. Un 401 sur/products.jsonaccompagné 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, contientShopify.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.comau lieu deexample.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.comet expose les en-têtes à ce moment. - /products.json : généralement 404 sur le domaine personnalisé.
- DOM :
window.Shopifyetshopify-sectionabsents. Reste parfois le flux atom du blog. - CDN :
cdn.shopify.comreste 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
- Combien de boutiques Shopify y a-t-il en France ? — la méthode
/products.jsonappliquée à grande échelle. - Prospecter des boutiques Shopify en B2B — une fois Shopify identifié, comment construire une séquence.
- Extraire une liste de boutiques Shopify — les trois approches (outil maison, exploration de vitrine, achat d’annuaire).
- API annuaire Shopify — automatiser l’enrichissement avec un accès API.
- RGPD prospection B2B e-commerce — la conformité au-delà de l’identification technique.
← Retour au panorama des guides · Tester gratuitement · Voir les tarifs