Outiref

Code source de l'URL : http://mahamoden.tn/

<!doctype html>
<html lang="fr">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <!-- Favicons -->
    <!--
      L'icone du domaine, deux fois, et le doublon est VOULU.

      Google cherche `/favicon.ico` A LA RACINE avant de lire ces balises. Le
      fichier ne vivait que dans /favicon/ : la racine repondait 404, et les
      resultats de recherche affichaient le globe gris generique au lieu du
      logo — constate le 2026-08-19 sur « site:mahamoden.tn ».

      `public/favicon.ico` est donc une copie de `public/favicon/favicon.ico`.
      Si l'un change, changer l'autre : ce sont deux fichiers, pas un lien.

      Il fait 48x48, la taille de reference de Google — qui attend un carre
      dont le cote est un multiple de 48. C'est aussi le cas du 192x192
      ci-dessous ; les 16, 32, 180 et 512 ne le sont pas, et ne servent qu'aux
      navigateurs et aux systemes mobiles.
    -->
    <link rel="icon" type="image/x-icon" href="/favicon.ico" />
    <link rel="icon" type="image/x-icon" href="/favicon/favicon.ico" />
    <link rel="icon" type="image/png" sizes="16x16" href="/favicon/favicon-16x16.png" />
    <link rel="icon" type="image/png" sizes="32x32" href="/favicon/favicon-32x32.png" />
    <link rel="apple-touch-icon" sizes="180x180" href="/favicon/apple-touch-icon.png" />
    <link rel="icon" type="image/png" sizes="192x192" href="/favicon/android-chrome-192x192.png" />
    <link rel="icon" type="image/png" sizes="512x512" href="/favicon/android-chrome-512x512.png" />

    <!-- Web manifest -->
    <link rel="manifest" href="/site.webmanifest" />

    <!-- Theme color (barre navigateur mobile) -->
    <meta name="theme-color" content="#0A0A0A" />
    <meta name="msapplication-TileColor" content="#0A0A0A" />
    <meta name="msapplication-TileImage" content="/favicon/android-chrome-192x192.png" />

    <!--
      Vérification du domaine par Meta.

      ÉCRITE EN DUR, et c'est une obligation : Meta refuse expressément une
      balise posée par JavaScript. Elle ne peut donc pas passer par PageSeo.

      Elle est répétée dans SocialPreviewController — ce n'est pas un oubli. Le
      robot de vérification de Meta se présente sous la même signature que
      celui des aperçus, il reçoit donc la page rendue par le serveur et non
      celle-ci. Sans la balise aux DEUX endroits, la vérification échouerait
      sans qu'on comprenne pourquoi.
    -->
    <meta name="facebook-domain-verification" content="s75zo8buwegwla1h2b6gxi3mh7kee2" />

    <!-- SEO de base (complété par react-helmet-async sur chaque page) -->
    <meta name="description" content="Maha Moden — Mode féminine élégante en Tunisie. Robes, manteaux, pantalons et collections exclusives. Livraison partout en Tunisie." />
    <meta name="robots" content="index, follow" />
    <meta name="author" content="Maha Moden" />

    <!--
      Open Graph ÉCRIT EN DUR, et ce n'est pas une redondance avec PageSeo.

      PageSeo pose ces mêmes balises, mais depuis JavaScript. Or le robot de
      Facebook — facebookexternalhit — n'exécute PAS de JavaScript : il lisait
      donc une page sans la moindre balise og:. Conséquence constatée le
      12 août 2026 : TOUT lien vers le site, partagé sur Facebook, Instagram,
      Messenger ou WhatsApp, s'affichait sans image, sans titre propre et sans
      description. Y compris les liens des publicités.

      Ces balises-ci sont le filet : elles garantissent qu'un partage montre au
      moins la marque et son visuel. Les pages produit méritent mieux — leur
      propre photo et leur prix — et c'est le rôle du rendu pour robots
      sociaux, côté serveur (voir SocialPreviewController).
    -->
    <meta property="og:site_name" content="Maha Moden" />
    <meta property="og:type" content="website" />
    <meta property="og:locale" content="fr_TN" />
    <meta property="og:title" content="Maha Moden — Mode Féminine Élégante" />
    <meta property="og:description" content="Mode féminine élégante, pensée pour la femme moderne. Collections exclusives, qualité premium. Livraison partout en Tunisie." />
    <meta property="og:url" content="https://mahamoden.tn/" />
    <meta property="og:image" content="https://mahamoden.tn/og-image.jpg" />
    <!-- Dimensions annoncées : sans elles, Facebook doit télécharger l'image
         avant de composer l'aperçu, et le premier partage s'affiche nu. -->
    <meta property="og:image:width" content="1200" />
    <meta property="og:image:height" content="630" />
    <meta property="og:image:alt" content="Maha Moden — mode féminine élégante" />

    <meta name="twitter:card" content="summary_large_image" />
    <meta name="twitter:title" content="Maha Moden — Mode Féminine Élégante" />
    <meta name="twitter:description" content="Mode féminine élégante, pensée pour la femme moderne. Livraison partout en Tunisie." />
    <meta name="twitter:image" content="https://mahamoden.tn/og-image.jpg" />
    <link rel="preconnect" href="https://mahamoden.tn" crossorigin />
    <link rel="dns-prefetch" href="https://mahamoden.tn" />

    <!--
      Mesure : GA4 et le pixel Meta ne sont demandés qu'une fois React monté,
      et chaque connexion neuve (DNS + TCP + TLS) coûtait alors ~325 ms au
      relevé du 16 août 2026. Ouvrir les deux tuyaux pendant que le bundle se
      télécharge rend ce délai invisible. Deux origines, pas plus : chaque
      preconnect inutilisé occupe une connexion au détriment du reste.
    -->
    <link rel="preconnect" href="https://www.googletagmanager.com" crossorigin />
    <link rel="preconnect" href="https://connect.facebook.net" crossorigin />

    <title>Maha Moden — Mode Féminine Élégante</title>

    <!--
      L'identité de la marque pour les moteurs : nom, logo, coordonnées et
      comptes officiels. C'est ce qui permet à Google de rattacher le site à une
      entreprise réelle (panneau de marque, résultats enrichis).

      ÉCRITE EN DUR, et sur toutes les pages, pour deux raisons : elle ne dépend
      d'aucune donnée, et les robots qui n'exécutent pas de JavaScript — Bing,
      ChatGPT, Claude, Perplexity — doivent la lire aussi. Les données
      structurées des fiches, rayons et articles, elles, sont posées par le
      serveur page par page (PageShellController côté Symfony).

      Les informations viennent des mentions légales et de la page Contact : si
      l'une change là-bas, elle change ici.
    -->
    <script type="application/ld+json">
      {
        "@context": "https://schema.org",
        "@type": "OnlineStore",
        "name": "Maha Moden",
        "legalName": "STE MAHA MODEN",
        "url": "https://mahamoden.tn/",
        "logo": "https://mahamoden.tn/logo.png",
        "image": "https://mahamoden.tn/og-image.jpg",
        "email": "contact@mahamoden.tn",
        "telephone": "+21658440119",
        "taxID": "0620712C",
        "currenciesAccepted": "TND",
        "areaServed": { "@type": "Country", "name": "Tunisie" },
        "address": {
          "@type": "PostalAddress",
          "streetAddress": "Route Kaïed M’Hamed Km 1,5 — Av. Hédi Soussi",
          "postalCode": "3039",
          "addressLocality": "Sfax",
          "addressCountry": "TN"
        },
        "sameAs": [
          "https://www.facebook.com/MAHAMODEN.1990",
          "https://www.instagram.com/maha_moden/"
        ]
      }
    </script>
    <script type="module" crossorigin src="/assets/index-AgeamvRs.js"></script>
    <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
    <link rel="modulepreload" crossorigin href="/assets/query-Cvj7AXH8.js">
    <link rel="modulepreload" crossorigin href="/assets/vendor-DZD9sr_e.js">
    <link rel="modulepreload" crossorigin href="/assets/utils-DF7TVy55.js">
    <link rel="modulepreload" crossorigin href="/assets/createLucideIcon-DnQkZOEJ.js">
    <link rel="modulepreload" crossorigin href="/assets/api-ByKu5IiL.js">
    <link rel="modulepreload" crossorigin href="/assets/mappers-BDwCDaaV.js">
    <link rel="modulepreload" crossorigin href="/assets/loadError-Sp70WtrQ.js">
    <link rel="modulepreload" crossorigin href="/assets/price-GWuic15D.js">
    <link rel="stylesheet" crossorigin href="/assets/index-CoWeKx6A.css">
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>