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 critère 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 de la boutique :

  • powered-by: Shopify : le plus direct, présent sur les pages de la vitrine comme sur les endpoints JSON (/products.json, /cart.js).
  • shopify-complexity-score : un en-tête technique propre à Shopify.
  • Un cookie _shopify_… dans set-cookie (par exemple _shopify_essential).
  • Un en-tête link qui annonce https://cdn.shopify.com en preconnect.

Commande de test :

curl -sL -D - -o /dev/null https://example.com | grep -i shopify

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

set-cookie: _shopify_essential=...; Path=/; HttpOnly; Secure
link: <https://cdn.shopify.com>; rel="preconnect", ...
shopify-complexity-score: 0
powered-by: Shopify

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

Précisions :

  • Testez la page finale (option -L) : une redirection de example.com vers www.example.com ou vers /fr-fr peut répondre sans ces en-têtes.
  • L’en-tête server vaut cloudflare sur les boutiques Shopify. Ce n’est pas un signal : beaucoup d’autres sites passent par Cloudflare.
  • Les en-têtes X-ShopId, X-Shopify-Stage ou server: cdn.shopify.com, cités dans d’anciens tutoriels, n’apparaissent plus sur les pages de vitrine que nous avons testées en octobre 2026 : leur absence ne prouve rien.
  • 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é.
  • Sur une architecture Hydrogen servie par un autre hébergeur, ces en-têtes sont en général absents du domaine principal.

Signature 2 : l’endpoint /products.json

Shopify expose nativement un endpoint JSON qui liste les produits d’une boutique : /products.json. C’est une signature très utilisée, 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 (30 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 une boutique Shopify pas encore ouverte.
  • 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.

Notre robot s’en sert, avec les autres signatures de ce guide, pour vérifier les boutiques de la base : plus de 270 000 boutiques Shopify vérifiées en Europe au 31 octobre 2026.

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 utilise plusieurs domaines et chemins CDN qui apparaissent dans le HTML rendu :

  • cdn.shopify.com (le CDN historique, toujours présent)
  • /cdn/shop/ sur le domaine de la boutique elle-même (fichiers du thème et images, servis depuis le domaine du marchand)
  • /cdn/shopifycloud/ (scripts communs de Shopify, par exemple les boutons de paiement accéléré)
  • extensions.shopifycdn.com et fonts.shopifycdn.com (pixels des applis, polices)
  • shop.app (Shop Pay, signature complémentaire)

Commande de test :

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

Sortie typique :

/cdn/shop/files/logo.png?v=1762799105
/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css
cdn.shopify.com/s/files/1/0123/4567/files/logo.png
shop.app/checkouts/...

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 derrière un serveur intermédiaire personnalisé, les images restent servies par le CDN de Shopify (cdn.shopify.com ou /cdn/shop/). C’est la signature qu’on garde quand /products.json renvoie un 404 et que les en-têtes sont masqués.

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 (cas le plus courant)
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 (serveur intermédiaire ?)
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 visible sur la page d’accueil ne prouve Shopify Plus. C’est une offre commerciale, pas un produit techniquement séparé, et Shopify a retiré en 2024 les marqueurs visibles qui le trahissaient sur la page d’accueil. Les signaux qui restent fiables sont rares :

  • Une appli intégrée aux étapes du paiement (informations, livraison, paiement) : ces extensions du checkout ne sont possibles que sur Plus. Les autres plans ne peuvent personnaliser que la page de remerciement et le suivi de commande.
  • Certaines applis affichent le plan exact dans le code de la page.
  • Multipass, la connexion unique qui fait passer un client d’un autre site à la boutique sans nouveau mot de passe : il n’existe que sur Plus.

Ce qui n’est pas un signal : le thème. Prestige, Impact, Symmetry ou Focal sont vendus à tous les marchands, sans contrôle de plan, et un marchand Plus peut garder un thème gratuit. Le volume de catalogue non plus : un gros catalogue dit la taille du marchand, pas son plan.

Dans notre base, la fiche n’indique Shopify Plus que quand un de ces signaux le confirme. Une case vide veut dire « inconnu », jamais « pas Plus ». Au 6 novembre 2026 : 4 494 boutiques Plus confirmées en Europe, dont 819 en France. La détection continue et ce chiffre monte. Dans l’API, le filtre plan=shopify_plus ne garde que ces boutiques.

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.

Ces applis sont détectées dans la base : sur les boutiques Shopify françaises, Judge.me apparaît sur 11 686 boutiques, Klaviyo sur 8 814 et Yotpo sur 636. La détection des abonnements est encore partielle : Recharge est détecté sur 29 boutiques françaises et Bold Subscriptions sur 17, des chiffres bas qui vont monter.

Cas particulier : Hydrogen et architectures découplées

Une partie des boutiques Shopify n’a pas de thème Liquid détectable. C’est notamment le cas des 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 · Voir l’échantillon gratuit · Voir les tarifs

Sans engagement

Vous voulez tester sur votre cible ?

50 fiches offertes à l’inscription, sans carte bancaire. Ensuite, 1 000 fiches pour 29 € HT, sans abonnement.