Outiref

Code source de l'URL : http://www.cadorama02.fr

<!DOCTYPE html>
<html lang="fr">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- SEO Meta Tags -->
  <title>CADORAMA — Supermarché asiatique &amp; coréen à Saint-Quentin (Aisne)</title>
  <meta name="description"
    content="Le supermarché asiatique de Saint-Quentin et de l'Aisne depuis 1999 : épicerie coréenne, japonaise, chinoise, thaï — ramen, soju, gochujang, sauces, nouilles. Click &amp; Collect gratuit, livraison Hauts-de-France. Un vrai magasin, pas une marketplace.">
  <meta name="keywords"
    content="supermarché asiatique Saint-Quentin, épicerie asiatique Aisne, épicerie coréenne Hauts-de-France, ramen coréen, soju, gochujang, magasin asiatique Saint-Quentin, click and collect">
  <meta name="author" content="CADORAMA">
  <meta name="robots" content="index, follow">
  <link rel="canonical" href="https://www.cadorama02.fr/">

  <!-- ✅ Schema.org statique — lu par Google, Gemini, ChatGPT, Perplexity SANS JS -->
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": ["OnlineStore", "LocalBusiness"],
    "name": "CADORAMA",
    "url": "https://www.cadorama02.fr",
    "logo": "https://www.cadorama02.fr/logo-cadorama.png",
    "description": "Le seul supermarché asiatique de Saint-Quentin et de l'Aisne depuis 1999 : épicerie coréenne, japonaise, chinoise, thaï et vietnamienne. Click & Collect gratuit, livraison Hauts-de-France.",
    "foundingDate": "1999",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "119 Rue d'Isle",
      "addressLocality": "Saint-Quentin",
      "postalCode": "02100",
      "addressRegion": "Hauts-de-France",
      "addressCountry": "FR"
    },
    "contactPoint": {
      "@type": "ContactPoint",
      "contactType": "Customer Service",
      "email": "contact@cadorama02.fr",
      "telephone": "+33-3-23-07-87-25"
    },
    "priceRange": "€€",
    "currenciesAccepted": "EUR",
    "paymentAccepted": "Carte de crédit, PayPal",
    "openingHours": "Mo-Sa 09:00-19:00",
    "areaServed": { "@type": "Country", "name": "France" },
    "sameAs": ["https://www.cadorama02.fr"]
  }
  </script>
  <script type="application/ld+json">
  {
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "CADORAMA",
    "url": "https://www.cadorama02.fr",
    "description": "Supermarché asiatique à Saint-Quentin (Aisne) — épicerie coréenne, japonaise, chinoise, thaï. Click & Collect & livraison Hauts-de-France.",
    "inLanguage": "fr-FR",
    "potentialAction": {
      "@type": "SearchAction",
      "target": { "@type": "EntryPoint", "urlTemplate": "https://www.cadorama02.fr/?q={search_term_string}" },
      "query-input": "required name=search_term_string"
    }
  }
  </script>

  <!-- Open Graph / Facebook -->
  <meta property="og:type" content="website">
  <meta property="og:url" content="https://cadorama02.fr/">
  <meta property="og:title" content="CADORAMA — Supermarché asiatique &amp; coréen à Saint-Quentin (Aisne)">
  <meta property="og:description"
    content="Le supermarché asiatique de Saint-Quentin et de l'Aisne depuis 1999 : épicerie coréenne, japonaise, chinoise — ramen, soju, gochujang. Click &amp; Collect gratuit, livraison Hauts-de-France.">
  <meta property="og:site_name" content="CADORAMA">
  <meta property="og:locale" content="fr_FR">

  <!-- Twitter -->
  <meta name="twitter:card" content="summary_large_image">
  <meta name="twitter:url" content="https://cadorama02.fr/">
  <meta name="twitter:title" content="CADORAMA — Supermarché asiatique &amp; coréen à Saint-Quentin (Aisne)">
  <meta name="twitter:description"
    content="Le supermarché asiatique de Saint-Quentin et de l'Aisne depuis 1999 : épicerie coréenne, japonaise, chinoise — ramen, soju, gochujang. Click &amp; Collect gratuit, livraison Hauts-de-France.">

  <!-- Favicon + PWA -->
  <link rel="icon" type="image/webp" sizes="72x72"   href="/logo-cadorama-72.webp">
  <link rel="icon" type="image/png" sizes="192x192" href="/logo-cadorama-192.png">
  <link rel="icon" type="image/png" sizes="72x72"   href="/logo-cadorama-72.png">
  <link rel="apple-touch-icon"      sizes="192x192" href="/logo-cadorama-192.png">
  <link rel="manifest" href="/manifest.json">

  <!-- 🚀 FONTS LOCALES AUTO-HÉBERGÉES (gain +600ms vs Google Fonts) -->
  <!-- Preload des fonts critiques pour FCP optimal -->
  <link rel="preload" href="/fonts/poppins-400.woff2" as="font" type="font/woff2" crossorigin>
  <link rel="preload" href="/fonts/poppins-700.woff2" as="font" type="font/woff2" crossorigin>
  <!-- @font-face inliné → supprime la requête bloquante /fonts/poppins.css -->
  <style>
    @font-face {
      font-family: 'Poppins';
      font-style: normal;
      font-weight: 400;
      font-display: optional;
      src: url('/fonts/poppins-400.woff2') format('woff2');
      unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
    }
    @font-face {
      font-family: 'Poppins';
      font-style: normal;
      font-weight: 700;
      font-display: optional;
      src: url('/fonts/poppins-700.woff2') format('woff2');
      unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
    }
  </style>

  <!-- 🚀 CLS fix : bloque les modifications de layout de Google Translate
       AVANT que le navigateur peigne quoi que ce soit. Placé dans <head>
       pour qu'elles s'appliquent synchronement, avant tout rendu. -->
  <style>
    .goog-te-banner-frame,
    .goog-te-banner-frame.skiptranslate,
    body > .skiptranslate:first-child,
    iframe.goog-te-banner-frame,
    iframe.skiptranslate[style*="visibility: visible"] {
      display: none !important;
      visibility: hidden !important;
      opacity: 0 !important;
      height: 0 !important;
      min-height: 0 !important;
      max-height: 0 !important;
      position: absolute !important;
      top: -9999px !important;
      z-index: -1 !important;
      pointer-events: none !important;
    }
    body {
      top: 0 !important;
      position: static !important;
      margin-top: 0 !important;
      padding-top: 0 !important;
    }
    body > .skiptranslate {
      display: none !important;
      height: 0 !important;
      margin: 0 !important;
      padding: 0 !important;
    }
    .goog-te-gadget,
    .goog-te-menu-value,
    .goog-te-menu-frame { display: none !important; }
    .goog-te-combo {
      display: inline-block !important;
      position: absolute !important;
      overflow: hidden !important;
      clip: rect(0 0 0 0) !important;
      height: 1px !important;
      width: 1px !important;
      margin: -1px !important;
      padding: 0 !important;
      border: 0 !important;
      left: 0 !important;
      top: 0 !important;
    }
  </style>

  <!-- ─── GTM + GA4 — chargement DIFFÉRÉ (perf) ───────────────────────────
       Avant : ~263 KB analytics chargés AVANT le rendu React → +1.5-2s TBT.
       Après : queue dataLayer prête immédiatement (events déclenchés par
       l'app y sont bufferisés), mais le SCRIPT GTM ne charge qu'au :
         - premier scroll / clic / mousemove / keydown / touchstart, OU
         - après 4s post-load (whichever comes first)
       Pattern utilisé par Amazon, AliExpress, Booking, etc.
       ─────────────────────────────────────────────────────────────────── -->
  <script>
    // 1) dataLayer + gtag stub disponibles IMMÉDIATEMENT
    //    → les composants React qui font dataLayer.push() pendant le chargement
    //    ne perdent aucun event (ils sont rejoués quand GTM arrive)
    window.dataLayer = window.dataLayer || [];
    window.gtag = function(){ window.dataLayer.push(arguments); };
    window.dataLayer.push({ 'gtm.start': Date.now(), event: 'gtm.js' });
    window.gtag('js', new Date());
    window.gtag('config', 'G-BGKWBZ9WJ3', {
      anonymize_ip: true,
      allow_google_signals: false,
      allow_ad_personalization_signals: false
    });

    // 2) Loader différé — n'injecte les scripts qu'au premier signal d'engagement
    (function(){
      var loaded = false;
      var triggers = ['scroll','click','keydown','mousemove','touchstart','wheel'];

      function injectGTM(){
        if (loaded) return;
        loaded = true;
        triggers.forEach(function(e){ window.removeEventListener(e, injectGTM); });

        // GTM container
        var gtmScript = document.createElement('script');
        gtmScript.async = true;
        gtmScript.src = 'https://www.googletagmanager.com/gtm.js?id=GTM-M3ZHVL2G';
        document.head.appendChild(gtmScript);

        // GA4 gtag.js (séparé du GTM container)
        var gaScript = document.createElement('script');
        gaScript.async = true;
        gaScript.src = 'https://www.googletagmanager.com/gtag/js?id=G-BGKWBZ9WJ3';
        document.head.appendChild(gaScript);
      }

      // Chargement au 1er signal d'engagement utilisateur
      triggers.forEach(function(e){
        window.addEventListener(e, injectGTM, { once: true, passive: true });
      });

      // Filet de sécurité : 4s après load max (capture page_view même si user ne bouge pas)
      if (document.readyState === 'complete') {
        setTimeout(injectGTM, 4000);
      } else {
        window.addEventListener('load', function(){ setTimeout(injectGTM, 4000); }, { once: true });
      }
    })();
  </script>

  <!-- Préconnexion au backend et services externes -->
  <link rel="preconnect" href="https://cadorama-ecommerce.onrender.com" crossorigin>
  <link rel="preconnect" href="https://res.cloudinary.com" crossorigin>
  <link rel="preconnect" href="https://flagcdn.com" crossorigin>
  <link rel="dns-prefetch" href="https://www.googletagmanager.com">
  <link rel="dns-prefetch" href="https://flagcdn.com">
  <link rel="dns-prefetch" href="https://i.imgur.com">
  <link rel="dns-prefetch" href="https://imgur.com">

  <!-- Preload du CSS critique -->

  <!-- Meta pour performance -->
  <meta name="theme-color" content="#1f2937">

  <!-- Style inline pour le loader initial (pas de requête externe) -->
  <style>
    #initial-loader {
      position: fixed;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background: linear-gradient(135deg, #1f2937 0%, #111827 100%);
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      z-index: 9999;
      transition: opacity 0.3s ease-out;
    }

    #initial-loader.fade-out {
      opacity: 0;
      pointer-events: none;
    }

    .loader-logo {
      margin-bottom: 2rem;
      animation: pulse 1.5s ease-in-out infinite;
    }
    .loader-logo img {
      height: 140px;
      width: auto;
      -o-object-fit: contain;
         object-fit: contain;
    }
    /* Mobile : logo plus grand pour meilleure visibilité au démarrage PWA */
    @media (max-width: 640px) {
      .loader-logo img {
        height: 160px;
      }
    }

    .loader-spinner {
      width: 50px;
      height: 50px;
      border: 4px solid rgba(245, 158, 11, 0.1);
      border-top-color: #f59e0b;
      border-radius: 50%;
      animation: spin 0.8s linear infinite;
    }

    .loader-text {
      margin-top: 1.5rem;
      color: #9ca3af;
      font-size: 0.875rem;
      animation: pulse 1.5s ease-in-out infinite;
    }

    @keyframes spin {
      to {
        transform: rotate(360deg);
      }
    }

    @keyframes pulse {

      0%,
      100% {
        opacity: 1;
      }

      50% {
        opacity: 0.5;
      }
    }
  </style>
  
  <!-- ✨ jQuery chargé conditionnellement UNIQUEMENT pour le widget Mondial Relay sur la page checkout -->
  <script>
    // Détecte si on est sur la page checkout et charge jQuery de manière asynchrone
    if (window.location.pathname.includes('/checkout')) {
      const loadScript = (src) => {
        return new Promise((resolve, reject) => {
          const script = document.createElement('script');
          script.src = src;
          script.async = true;
          script.onload = resolve;
          script.onerror = reject;
          document.head.appendChild(script);
        });
      };
      
      // Charger jQuery puis le widget Mondial Relay en séquence
      loadScript('//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js')
        .then(() => loadScript('//widget.mondialrelay.com/parcelshop-picker/jquery.plugin.mondialrelay.parcelshoppicker.min.js'))
        .catch(err => console.warn('Failed to load Mondial Relay widget:', err));
    }
  </script>
  <script type="module" crossorigin src="/assets/index.CirFHB-p.js"></script>
  <link rel="modulepreload" crossorigin href="/assets/react-core.D82PMoMU.js">
  <link rel="modulepreload" crossorigin href="/assets/sentry.Bx1sL7fw.js">
  <link rel="modulepreload" crossorigin href="/assets/ui-vendor.9NecTGjv.js">
  <link rel="modulepreload" crossorigin href="/assets/react-router.B_Fow9xa.js">
  <link rel="stylesheet" crossorigin href="/assets/index.Clea68wd.css">
</head>

<body>

  <!-- Google Tag Manager (noscript) -->
  <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-M3ZHVL2G"
  height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  <!-- End Google Tag Manager (noscript) -->

  <!-- Loader initial affiché instantanément -->
  <div id="initial-loader">
    <div class="loader-logo"><img src="/logo-cadorama-200.webp" alt="CADORAMA" width="200" height="200" /></div>
    <div class="loader-spinner"></div>
    <div class="loader-text">Chargement de votre boutique...</div>
  </div>

  <!--
    ✅ CONTENU STATIQUE — visible par tous les crawlers (Google, Bing, Perplexity,
    ChatGPT, Gemini, DeepSeek…) même sans exécution JavaScript.
    React remplace ce contenu au chargement. Les humains ne le voient pas
    (masqué par le #initial-loader), les robots si.
  -->
  <div id="root">
    <header>
      <nav aria-label="Navigation principale">
        <a href="https://www.cadorama02.fr/">
          <strong>CADORAMA</strong> — Boutique en ligne de cadeaux et articles à prix malin
        </a>
        <ul>
          <li><a href="https://www.cadorama02.fr/categories">Toutes les catégories</a></li>
          <li><a href="https://www.cadorama02.fr/promotions">Promotions</a></li>
          <li><a href="https://www.cadorama02.fr/faq">FAQ</a></li>
          <li><a href="https://www.cadorama02.fr/cgv">CGV</a></li>
        </ul>
      </nav>
    </header>
    <main>
      <h1>CADORAMA — Trouvailles utiles &amp; idées cadeaux à prix malin</h1>
      <p>
        Commerçant local français depuis 1999 à Saint-Quentin (02100, Hauts-de-France).
        Boutique en ligne généraliste : cadeaux, décoration, alimentation &amp; boissons,
        électronique, mode, beauté, jouets, sports, animalerie, bricolage, brocante.
        Livraison en France métropolitaine. Click &amp; Collect gratuit en magasin.
        Paiement sécurisé Stripe &amp; PayPal. Retours gratuits sous 14 jours.
      </p>
      <section aria-label="Catégories de produits">
        <h2>Nos catégories</h2>
        <ul>
          <li><a href="https://www.cadorama02.fr/categories/cadeaux-occasions">Cadeaux &amp; Occasions</a></li>
          <li><a href="https://www.cadorama02.fr/categories/maison-decoration">Maison &amp; Décoration</a></li>
          <li><a href="https://www.cadorama02.fr/categories/alimentation-boissons">Alimentation &amp; Boissons</a></li>
          <li><a href="https://www.cadorama02.fr/categories/electronique">Électronique</a></li>
          <li><a href="https://www.cadorama02.fr/categories/mode-maroquinerie">Mode &amp; Maroquinerie</a></li>
          <li><a href="https://www.cadorama02.fr/categories/beaute-soins">Beauté &amp; Soins</a></li>
          <li><a href="https://www.cadorama02.fr/categories/jouets-loisirs">Jouets &amp; Loisirs</a></li>
          <li><a href="https://www.cadorama02.fr/categories/sports-plein-air">Sports &amp; Plein air</a></li>
          <li><a href="https://www.cadorama02.fr/categories/animalerie">Animalerie</a></li>
          <li><a href="https://www.cadorama02.fr/categories/brocante">Brocante &amp; Seconde main</a></li>
        </ul>
      </section>
      <section aria-label="Informations boutique">
        <h2>CADORAMA — Informations</h2>
        <address>
          119 Rue d'Isle, 02100 Saint-Quentin, Hauts-de-France, France<br>
          Téléphone : <a href="tel:+33323078725">03 23 07 87 25</a><br>
          Email : <a href="/cdn-cgi/l/email-protection#d8bbb7b6acb9bbac98bbb9bcb7aab9b5b9e8eaf6beaa"><span class="__cf_email__" data-cfemail="13707c7d67727067537072777c61727e7223213d7561">[email&#160;protected]</span></a><br>
          Ouvert du lundi au samedi, 9h–19h
        </address>
      </section>
    </main>
    <footer>
      <p>© CADORAMA — SIRET 423 195 395 00011 — Tous droits réservés</p>
      <nav aria-label="Liens légaux">
        <a href="https://www.cadorama02.fr/cgv">CGV</a> ·
        <a href="https://www.cadorama02.fr/privacy">Confidentialité</a> ·
        <a href="https://www.cadorama02.fr/returns">Retours</a> ·
        <a href="https://www.cadorama02.fr/faq">FAQ</a>
      </nav>
    </footer>
  </div>

  <!-- Script pour masquer le loader une fois React chargé -->
  <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
    // Masquer le loader dès que React prend le relais
    window.addEventListener('DOMContentLoaded', () => {
      const checkReactMount = setInterval(() => {
        const root = document.getElementById('root');
        if (root && root.children.length > 0) {
          const loader = document.getElementById('initial-loader');
          if (loader) {
            loader.classList.add('fade-out');
            setTimeout(() => loader.remove(), 300);
          }
          clearInterval(checkReactMount);
        }
      }, 50);

      // Timeout de sécurité (10 secondes max)
      setTimeout(() => {
        const loader = document.getElementById('initial-loader');
        if (loader) {
          loader.classList.add('fade-out');
          setTimeout(() => loader.remove(), 300);
        }
        clearInterval(checkReactMount);
      }, 10000);
    });
  </script>



  <!-- ✅ Fallback no-JS — utilisateurs et crawlers sans JS -->
  <noscript>
    <style>
      #initial-loader { display: none !important; }
      #root { display: block !important; font-family: sans-serif; max-width: 900px; margin: 0 auto; padding: 20px; }
    </style>
    <p style="background:#fef3c7;padding:12px;border-radius:8px;font-size:14px;">
      ⚠️ JavaScript est désactivé. Certaines fonctionnalités ne sont pas disponibles.
      <a href="mailto:contact@cadorama02.fr">Contactez-nous</a> pour commander.
    </p>
  </noscript>

</body>

</html>