Démo – données d’exemple · catalogue et entreprises fictifs

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 /espace-client/droitsHTTP 200text/html; charset=utf-85,8 Ko14 msJavaScript exécuté : aucun

✓ Balise <title>

Gestion des droits | Démo catalogue fluides

<title>Gestion des droits | Démo catalogue fluides</title>

✗ Meta description

Absent du HTML servi.

✓ Balise canonical

https://otnpf6qjgg.demo.wassimzo.com/espace-client/droits

<link rel="canonical" href="https://otnpf6qjgg.demo.wassimzo.com/espace-client/droits"/>

✓ Titre H1

Gestion des droits

<h1 class="text-2xl font-semibold">Gestion des droits</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>Gestion des droits | 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/droits-r5A8I-3V.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/espace-client/droits"/></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 active" title="Changer de profil de démonstration" href="/espace-client" data-status="active" aria-current="page"><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 border-marque! text-marque! font-medium" href="/espace-client" data-status="active" aria-current="page">Espace client</a><a class="whitespace-nowrap border-b-2 border-transparent px-3 py-2 text-slate-600 hover:text-marque" href="/panier">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"><h1 class="text-2xl font-semibold">Gestion des droits</h1><div class="carte"><p class="text-sm text-slate-700">Cette page est réservée à l’administrateur de l’entreprise<!-- -->.</p><div class="mt-4"><form class="contents" action="/api/profil" method="post"><input type="hidden" name="profil" value="fsn-admin"/><input type="hidden" name="retour" value="/espace-client/droits"/><button type="submit" class="bouton-principal">Prendre le profil admin de Froid Service Nord</button></form></div></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=%2Fespace-client%2Fdroits&amp;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"}}]},"/espace-client/droits":$R[8]={preloads:$R[9]=["/assets/droits-r5A8I-3V.js","/assets/BoutonProfil-mOTXvqxH.js","/assets/SelecteurProfilRapide-DgFY7zz0.js"]}}},matches:$R[10]=[$R[11]={i:"__root__#",u:1791896732446,s:"success",l:$R[12]={utilisateur:null},ssr:!0},$R[13]={i:"#espace-client#droits#espace-client#droits",u:1791896732446,s:"success",l:$R[14]={utilisateur:null,autorise:!1},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>