Recette SSR
Le serveur redemande la page par une requête HTTP brute, comme un robot d’indexation : aucun navigateur, aucun JavaScript exécuté. On cherche ensuite dans le HTML reçu (hors balises <script>) le titre, la meta description, la balise canonical et les fiches produit.
GET /panierHTTP 200text/html; charset=utf-811,3 Ko10 msJavaScript exécuté : aucun
✓ Balise <title>
Panier de demande de devis | Démo catalogue fluides
<title>Panier de demande de devis | Démo catalogue fluides</title>✗ Meta description
Absent du HTML servi.
✓ Balise canonical
https://otnpf6qjgg.demo.wassimzo.com/panier
<link rel="canonical" href="https://otnpf6qjgg.demo.wassimzo.com/panier"/>✓ Titre H1
Panier de demande de devis
<h1 class="text-2xl font-semibold">Panier de demande de devis</h1>— 0 fiche produit trouvée dans le HTML serveur
4 balises <script> ignorées : seules les balises réellement rendues dans le HTML sont comptées.
HTML brut reçu
<!DOCTYPE html><html lang="fr"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/assets/app-yW1jEKvs.css" data-precedence="default"/><title>Panier de demande de devis | Démo catalogue fluides</title><meta name="robots" content="noindex"/><link rel="modulepreload" href="/assets/index-Cbfsqsdq.js"/><link rel="modulepreload" href="/assets/react-DmeiICsC.js"/><link rel="modulepreload" href="/assets/schemas-DIlC3hV3.js"/><link rel="modulepreload" href="/assets/panier-BLoAXpYb.js"/><link rel="modulepreload" href="/assets/BoutonProfil-mOTXvqxH.js"/><link rel="modulepreload" href="/assets/SelecteurProfilRapide-DgFY7zz0.js"/><link rel="canonical" href="https://otnpf6qjgg.demo.wassimzo.com/panier"/></head><body class="bg-slate-50 font-sans text-slate-900 antialiased"><div class="flex min-h-screen flex-col"><div class="bg-amber-100 px-3 py-1.5 text-center text-xs text-amber-900 sm:text-sm" data-bandeau-demo="true"><strong>Démo – données d’exemple · catalogue et entreprises fictifs</strong><span class="hidden sm:inline"> — aucune donnée, aucun logo, aucun prix ni client réel</span></div><header class="border-b border-slate-200 bg-white"><div class="mx-auto flex max-w-6xl flex-wrap items-center justify-between gap-3 px-4 py-3"><a class="flex items-baseline gap-2" href="/"><span class="text-lg font-semibold tracking-tight text-marque">Fluides Rétrofit</span><span class="pastille bg-slate-100 text-slate-600">démo</span></a><a class="rounded-full border border-slate-200 px-3 py-1 text-xs text-slate-700 hover:border-marque sm:text-sm" title="Changer de profil de démonstration" href="/espace-client"><span>Visiteur anonyme · choisir un profil</span></a></div><nav class="mx-auto flex max-w-6xl gap-1 overflow-x-auto px-2 text-sm sm:px-4" aria-label="Navigation principale"><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque" href="/">Accueil</a><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque" href="/catalogue">Catalogue</a><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque" href="/espace-client">Espace client</a><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque border-marque! text-marque! font-medium" href="/panier" data-status="active" aria-current="page">Panier de devis</a><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque" href="/admin">Back-office</a><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque" href="/recette-ssr">Recette SSR</a><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque" href="/architecture">Architecture</a></nav></header><main class="mx-auto w-full flex-1 px-4 py-6 max-w-6xl"><!--$--><div class="space-y-6"><div><h1 class="text-2xl font-semibold">Panier de demande de devis</h1><p class="mt-1 text-sm text-slate-600">Pas de prix en ligne : la demande part au service commercial avec le SIRET et l’attestation de capacité de l’entreprise.</p></div><div class="grid gap-6 lg:grid-cols-[1fr_22rem]"><section class="carte"><h2 class="font-semibold">0<!-- --> ligne</h2><p class="mt-3 text-sm text-slate-600">Le panier est vide.<!-- --> <a href="/catalogue?remplace=R-404A&application=froid-commercial-negatif&huile=POE&gwp_max=2500" class="lien">Choisir des fluides dans le sélecteur de rétrofit</a>.</p></section><aside class="space-y-4"><div class="carte"><h2 class="font-semibold">Demandeur</h2><p class="mt-2 text-sm text-slate-600">Choisissez un profil d’entreprise (un clic, sans inscription) pour envoyer la demande.</p><div class="mt-3"><div class="flex flex-wrap items-center gap-2 text-sm"><span class="text-slate-500">Changer de profil en un clic :</span><form class="contents" action="/api/profil" method="post"><input type="hidden" name="profil" value="fsn-admin"/><input type="hidden" name="retour" value="/panier"/><button type="submit" class="rounded-full border border-slate-300 bg-white px-3 py-1 text-slate-700 hover:border-marque hover:text-marque">Admin<!-- --> · <!-- -->Froid Service Nord</button></form><form class="contents" action="/api/profil" method="post"><input type="hidden" name="profil" value="fsn-acheteur"/><input type="hidden" name="retour" value="/panier"/><button type="submit" class="rounded-full border border-slate-300 bg-white px-3 py-1 text-slate-700 hover:border-marque hover:text-marque">Acheteur<!-- --> · <!-- -->Froid Service Nord</button></form><form class="contents" action="/api/profil" method="post"><input type="hidden" name="profil" value="fsn-technicien"/><input type="hidden" name="retour" value="/panier"/><button type="submit" class="rounded-full border border-slate-300 bg-white px-3 py-1 text-slate-700 hover:border-marque hover:text-marque">Technicien<!-- --> · <!-- -->Froid Service Nord</button></form><form class="contents" action="/api/profil" method="post"><input type="hidden" name="profil" value="ca-acheteur"/><input type="hidden" name="retour" value="/panier"/><button type="submit" class="rounded-full border border-slate-300 bg-white px-3 py-1 text-slate-700 hover:border-marque hover:text-marque">Acheteuse<!-- --> · <!-- -->Clim Atlantique</button></form></div></div></div><div class="carte space-y-3"><label class="block"><span class="etiquette">Commentaire (facultatif)</span><textarea class="champ" rows="3" maxLength="500" placeholder="Chantier, délai souhaité…"></textarea></label><button type="button" disabled="" class="bouton-principal w-full">Envoyer la demande de devis</button></div></aside></div></div><script>(function(a,f){let l;try{l=JSON.parse(sessionStorage.getItem(a)||"{}")}catch{return}const n=l?.[f||history.state?.__TSR_key];let c=!1;for(const t in n){const e=n[t],o=e?.scrollX,s=e?.scrollY;if(Number.isFinite(o)&&Number.isFinite(s)){if(t==="window")scrollTo(o,s),c=!0;else if(t)try{const r=document.querySelector(t);r&&(r.scrollLeft=o,r.scrollTop=s)}catch{}}}if(c)return;const i=location.hash.slice(1);if(i){const t=history.state?.__hashScrollIntoViewOptions??!0;if(t){const e=document.getElementById(i);e&&e.scrollIntoView(t)}return}scrollTo(0,0)})("tsr-scroll-restoration-v1_3");document.currentScript.remove()</script><!--/$--></main><footer class="border-t border-slate-200 bg-white"><div class="mx-auto flex max-w-6xl flex-col gap-2 px-4 py-4 text-xs text-slate-500 sm:flex-row sm:items-center sm:justify-between"><p>Démonstration technique : entreprises, documents et demandes fictifs, réinitialisés à chaque redémarrage.</p><p class="flex gap-4"><a href="/recette-ssr?page=%2Fpanier&lancer=true" class="lien">Recette SSR de cette page</a><a class="lien" href="/architecture">Architecture</a></p></div></footer></div><script data-tsr-stream-part="">(self.$R=self.$R||{})["tsr"]=[];self.$_TSR={h(){this.hydrated=!0,this.c()},e(){this.streamEnded=!0,this.c()},c(){this.hydrated&&this.streamEnded&&(delete self.$_TSR,delete self.$R.tsr)},p(e){this.initialized?e():this.buffer.push(e)},buffer:[]};$_TSR.router=($R=>$R[0]={manifest:$R[1]={routes:$R[2]={__root__:$R[3]={preloads:$R[4]=["/assets/index-Cbfsqsdq.js","/assets/react-DmeiICsC.js","/assets/schemas-DIlC3hV3.js"],scripts:$R[5]=[$R[6]={attrs:$R[7]={type:"module",async:!0,src:"/assets/index-Cbfsqsdq.js"}}]},"/panier":$R[8]={preloads:$R[9]=["/assets/panier-BLoAXpYb.js","/assets/BoutonProfil-mOTXvqxH.js","/assets/SelecteurProfilRapide-DgFY7zz0.js"]}}},matches:$R[10]=[$R[11]={i:"__root__#",u:1791896601596,s:"success",l:$R[12]={utilisateur:null},ssr:!0},$R[13]={i:"#panier#panier",u:1791896601596,s:"success",l:$R[14]={utilisateur:null,produits:$R[15]=[$R[16]={slug:"r-744",nom:"R-744",conditionnements:$R[17]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[18]={slug:"r-1270",nom:"R-1270",conditionnements:$R[19]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg"]},$R[20]={slug:"r-290",nom:"R-290",conditionnements:$R[21]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg"]},$R[22]={slug:"r-600a",nom:"R-600a",conditionnements:$R[23]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg"]},$R[24]={slug:"r-1234yf",nom:"R-1234yf",conditionnements:$R[25]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg"]},$R[26]={slug:"r-1234ze",nom:"R-1234ze",conditionnements:$R[27]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg"]},$R[28]={slug:"r-454c",nom:"R-454C",conditionnements:$R[29]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[30]={slug:"r-455a",nom:"R-455A",conditionnements:$R[31]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[32]={slug:"r-454b",nom:"R-454B",conditionnements:$R[33]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[34]={slug:"r-450a",nom:"R-450A",conditionnements:$R[35]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[36]={slug:"r-513a",nom:"R-513A",conditionnements:$R[37]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[38]={slug:"r-32",nom:"R-32",conditionnements:$R[39]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[40]={slug:"r-452b",nom:"R-452B",conditionnements:$R[41]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[42]={slug:"r-466a",nom:"R-466A",conditionnements:$R[43]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[44]={slug:"r-448a",nom:"R-448A",conditionnements:$R[45]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[46]={slug:"r-449a",nom:"R-449A",conditionnements:$R[47]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[48]={slug:"r-407f",nom:"R-407F",conditionnements:$R[49]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[50]={slug:"r-442a",nom:"R-442A",conditionnements:$R[51]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[52]={slug:"r-407a",nom:"R-407A",conditionnements:$R[53]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[54]={slug:"r-427a",nom:"R-427A",conditionnements:$R[55]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[56]={slug:"r-452a",nom:"R-452A",conditionnements:$R[57]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[58]={slug:"r-438a",nom:"R-438A",conditionnements:$R[59]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[60]={slug:"r-417a",nom:"R-417A",conditionnements:$R[61]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]},$R[62]={slug:"r-422d",nom:"R-422D",conditionnements:$R[63]=["Bouteille consignée 10 kg","Bouteille consignée 12 kg","Bouteille consignée 50 kg"]}]},ssr:!0}]})($R["tsr"]);$_TSR.e();{let s=document.currentScript,p;while((p=s.previousElementSibling)&&p.hasAttribute('data-tsr-stream-part'))p.remove();s.remove()}</script><script type="module" async="" src="/assets/index-Cbfsqsdq.js"></script><script>document.currentScript.remove();/*$tsr-stream-boundary*/</script></body></html>