ajouter sitemap et corriger SEO(title et description)
This commit is contained in:
1
frontend/.gitignore
vendored
1
frontend/.gitignore
vendored
@@ -22,3 +22,4 @@ dist-ssr
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
||||
.DS_Store
|
||||
|
||||
@@ -22,4 +22,4 @@ Disallow: /saisir-code-unique
|
||||
Disallow: /perdu
|
||||
|
||||
# Sitemap
|
||||
Sitemap: https://thetiptop.fr/sitemap
|
||||
Sitemap: https://www.dsp5-archi-o24a-4-5-g4.fr/sitemap.xml
|
||||
|
||||
13
frontend/public/sitemap.xml
Normal file
13
frontend/public/sitemap.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/accueil</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/regles-jeu</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/contact</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/mentions-legales</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/cgu</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/confidentialite</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/accessibilite</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/sitemap</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/inscription</loc></url>
|
||||
<url><loc>https://www.dsp5-archi-o24a-4-5-g4.fr/connexion</loc></url>
|
||||
</urlset>
|
||||
BIN
frontend/src/assets/img/banner-the-tip-top.webp
Normal file
BIN
frontend/src/assets/img/banner-the-tip-top.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 122 KiB |
@@ -181,8 +181,8 @@ export default function Footer() {
|
||||
01 84 80 20 34
|
||||
</a>
|
||||
|
||||
<a href="mailto:contact@thetiptop.fr" className="inline-block mt-3 font-medium break-all hover:text-teal-300">
|
||||
contact@thetiptop.fr
|
||||
<a href="mailto:thetiptop.gp4@gmail.com" className="inline-block mt-3 font-medium break-all hover:text-teal-300">
|
||||
thetiptop.gp4@gmail.com
|
||||
</a>
|
||||
|
||||
<p className="text-teal-100 text-sm mt-2">
|
||||
|
||||
29
frontend/src/hooks/usePageMeta.js
Normal file
29
frontend/src/hooks/usePageMeta.js
Normal file
@@ -0,0 +1,29 @@
|
||||
import { useEffect } from 'react'
|
||||
|
||||
// Permet à une page de définir son propre <title>/<meta description> le
|
||||
// temps qu'elle est affichée. La SPA n'a qu'un seul index.html : sans ce
|
||||
// hook, toutes les routes partagent le même title/meta. Les valeurs
|
||||
// précédentes sont restaurées au démontage, donc quitter la page revient à
|
||||
// l'état d'avant (celui d'index.html, ou celui d'une page parente si elles
|
||||
// s'enchaînent).
|
||||
export default function usePageMeta({ title, description } = {}) {
|
||||
useEffect(() => {
|
||||
const previousTitle = document.title
|
||||
if (title) {
|
||||
document.title = title
|
||||
}
|
||||
|
||||
const metaEl = document.querySelector('meta[name="description"]')
|
||||
const previousDescription = metaEl?.getAttribute('content') ?? null
|
||||
if (description && metaEl) {
|
||||
metaEl.setAttribute('content', description)
|
||||
}
|
||||
|
||||
return () => {
|
||||
document.title = previousTitle
|
||||
if (metaEl && previousDescription !== null) {
|
||||
metaEl.setAttribute('content', previousDescription)
|
||||
}
|
||||
}
|
||||
}, [title, description])
|
||||
}
|
||||
@@ -31,7 +31,7 @@ export default function Accessibilite() {
|
||||
<p className="text-gray-700 leading-relaxed text-sm sm:text-base">
|
||||
Si vous rencontrez un obstacle à l'accessibilité sur le site, vous pouvez nous en faire
|
||||
part afin que nous puissions y remédier :<br />
|
||||
<strong>Email :</strong> contact@thetiptop.fr
|
||||
<strong>Email :</strong> thetiptop.gp4@gmail.com
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { Link } from 'react-router-dom'
|
||||
import usePageMeta from '../hooks/usePageMeta'
|
||||
import bannerImg from '../assets/img/banner-the-tip-top.webp'
|
||||
|
||||
const faqs = [
|
||||
{
|
||||
question: 'Comment obtenir un code ?',
|
||||
answer: "Achetez un produit Thé Tip Top d'une valeur supérieure à 49 € dans notre boutique de Nice : un code unique à 10 caractères figure sur votre ticket de caisse ou votre facture.",
|
||||
answer: "Achetez pour plus de 49 € dans notre boutique Thé Tip Top de Nice, entre le 2 et le 31 octobre 2026 : un code unique à 10 caractères figure sur votre ticket de caisse ou votre facture.",
|
||||
},
|
||||
{
|
||||
question: 'Quels sont les lots à gagner ?',
|
||||
@@ -25,7 +26,7 @@ const faqs = [
|
||||
},
|
||||
{
|
||||
question: 'Jusqu\'à quand puis-je jouer ?',
|
||||
answer: 'La participation est possible pendant toute la durée du jeu-concours, soit 30 jours à compter de son ouverture. Consultez la page Règles du jeu pour le détail des dates.',
|
||||
answer: 'La saisie des codes est ouverte du 2 au 31 octobre 2026 inclus. Les lots sont ensuite à retirer jusqu\'au 30 novembre 2026.',
|
||||
},
|
||||
{
|
||||
question: 'Que faire si mon code n\'est pas reconnu ?',
|
||||
@@ -33,7 +34,7 @@ const faqs = [
|
||||
},
|
||||
{
|
||||
question: 'Où retirer mon lot ?',
|
||||
answer: 'Dans notre boutique de Nice, sur présentation de votre compte utilisateur validé et de la confirmation de gain affichée dans votre espace « Mes gains ».',
|
||||
answer: 'Dans notre boutique de Nice, sur présentation de votre compte utilisateur validé et de la confirmation de gain affichée dans votre espace « Mes gains », jusqu\'au 30 novembre 2026.',
|
||||
},
|
||||
]
|
||||
|
||||
@@ -51,13 +52,18 @@ const faqJsonLd = {
|
||||
}
|
||||
|
||||
export default function Accueil() {
|
||||
usePageMeta({
|
||||
title: 'Jeu-concours 100 % Gagnant | Thé Tip Top — Thés bio et faits main',
|
||||
description: "Du 2 au 31 octobre, tout ticket de plus de 49 € de notre boutique de Nice porte un code 100 % gagnant. Saisissez le vôtre et repartez avec votre lot.",
|
||||
})
|
||||
|
||||
return (
|
||||
<div className="bg-gray-50 min-h-screen">
|
||||
|
||||
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(faqJsonLd) }} />
|
||||
|
||||
{/* Bannière */}
|
||||
<section className="w-full h-48 sm:h-64 md:h-80 lg:h-96 overflow-hidden">
|
||||
<section className="w-full">
|
||||
<img
|
||||
src={bannerImg}
|
||||
alt="Jeu-concours 100 % Gagnant Thé Tip Top, du 2 au 31 octobre 2026 : tentez de gagner un an de thé d'une valeur de 360 € pour l'ouverture de notre 10e boutique à Nice."
|
||||
@@ -98,12 +104,11 @@ export default function Accueil() {
|
||||
<h2 className="text-2xl sm:text-3xl font-bold text-[#006B6B] mb-6 sm:mb-8 text-center">
|
||||
Comment participer ?
|
||||
</h2>
|
||||
<ol className="grid grid-cols-2 md:grid-cols-4 gap-4 list-none">
|
||||
<ol className="grid grid-cols-1 sm:grid-cols-3 gap-4 list-none">
|
||||
{[
|
||||
{ num: '1', text: 'Achat de 49 € minimum' },
|
||||
{ num: '2', text: 'Recevez votre code unique' },
|
||||
{ num: '3', text: 'Saisissez le code sur le site' },
|
||||
{ num: '4', text: 'Découvrez votre lot' },
|
||||
{ num: '1', text: "Achat de 49 € dans notre boutique de Nice, code sur le ticket" },
|
||||
{ num: '2', text: 'Créez votre compte et saisissez le code' },
|
||||
{ num: '3', text: 'Découvrez et retirez votre lot en boutique' },
|
||||
].map((step) => (
|
||||
<li key={step.num} className="bg-white rounded-2xl shadow p-4 sm:p-6 text-center">
|
||||
<div className="text-2xl sm:text-3xl font-bold text-[#006B6B] mb-2 sm:mb-3">{step.num}</div>
|
||||
|
||||
@@ -30,7 +30,7 @@ export default function Cgu() {
|
||||
Les présentes Conditions Générales d'Utilisation (CGU) ont pour objet de définir
|
||||
les modalités et conditions dans lesquelles la société Thé Tip Top met à
|
||||
disposition des utilisateurs le site internet du jeu-concours « 100% Gagnant »,
|
||||
accessible à l'adresse https://www.thetiptop-concours.fr.
|
||||
accessible à l'adresse https://www.dsp5-archi-o24a-4-5-g4.fr.
|
||||
</p>
|
||||
<p>
|
||||
Toute utilisation du Site implique l'acceptation pleine et entière des présentes
|
||||
@@ -112,12 +112,19 @@ export default function Cgu() {
|
||||
caisse ou sa facture. Le Site valide le code et attribue immédiatement le lot
|
||||
correspondant selon la répartition préétablie :
|
||||
</p>
|
||||
<ul className="list-disc list-inside space-y-1 mt-2">
|
||||
<li>60 % des tickets : infuseur à thé</li>
|
||||
<li>20 % des tickets : boîte de 100 g de thé détox ou d'infusion</li>
|
||||
<li>10 % des tickets : boîte de 100 g de thé signature</li>
|
||||
<li>6 % des tickets : coffret découverte d'une valeur de 39 €</li>
|
||||
<li>4 % des tickets : coffret découverte d'une valeur de 69 €</li>
|
||||
<ul className="space-y-2 mt-2">
|
||||
{[
|
||||
{ pct: '60 %', text: 'infuseur à thé' },
|
||||
{ pct: '20 %', text: "boîte de 100 g de thé détox ou d'infusion" },
|
||||
{ pct: '10 %', text: 'boîte de 100 g de thé signature' },
|
||||
{ pct: '6 %', text: "coffret découverte d'une valeur de 39 €" },
|
||||
{ pct: '4 %', text: "coffret découverte d'une valeur de 69 €" },
|
||||
].map((lot) => (
|
||||
<li key={lot.pct} className="flex gap-2">
|
||||
<span className="font-semibold text-[#006B6B] flex-shrink-0">{lot.pct}</span>
|
||||
<span className="min-w-0 flex-1">des tickets : {lot.text}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<p className="mt-2">
|
||||
Un même utilisateur peut soumettre plusieurs codes distincts. La participation
|
||||
@@ -220,7 +227,7 @@ export default function Cgu() {
|
||||
<h3 className="font-semibold text-gray-800 mb-1">6.2 – Suppression du compte</h3>
|
||||
<p>
|
||||
L'utilisateur peut demander la suppression de son compte à tout moment en
|
||||
contactant directement l'équipe via contact@thetiptop.fr. La suppression entraîne
|
||||
contactant directement l'équipe via thetiptop.gp4@gmail.com. La suppression entraîne
|
||||
la perte définitive des participations et gains non encore réclamés. Les données
|
||||
personnelles sont supprimées conformément aux dispositions de la Politique de
|
||||
Confidentialité, sous réserve des obligations légales de conservation.
|
||||
|
||||
@@ -89,7 +89,7 @@ export default function Confidentialite() {
|
||||
</h2>
|
||||
<p className="text-gray-700 text-sm sm:text-base">
|
||||
Pour toute question concernant vos données personnelles :<br />
|
||||
<strong>Email :</strong> contact@thetiptop.fr
|
||||
<strong>Email :</strong> thetiptop.gp4@gmail.com
|
||||
</p>
|
||||
</section>
|
||||
|
||||
|
||||
@@ -37,10 +37,10 @@ export default function Contact() {
|
||||
Email
|
||||
</h2>
|
||||
<a
|
||||
href="mailto:contact@thetiptop.fr"
|
||||
href="mailto:thetiptop.gp4@gmail.com"
|
||||
className="text-sm sm:text-base hover:text-[#006B6B]"
|
||||
>
|
||||
contact@thetiptop.fr
|
||||
thetiptop.gp4@gmail.com
|
||||
</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -36,12 +36,12 @@ export default function MentionsLegales() {
|
||||
<p><strong>Directeur de la publication :</strong> M. Eric Bourdon, en sa qualité de Gérant</p>
|
||||
<p><strong>SIRET :</strong> 362 521 879 00054</p>
|
||||
<p><strong>TVA intracommunautaire :</strong> FR83362521879</p>
|
||||
<p><strong>Email :</strong> contact@thetiptop.fr</p>
|
||||
<p><strong>Email :</strong> thetiptop.gp4@gmail.com</p>
|
||||
<p><strong>Téléphone :</strong> 01 84 80 20 34</p>
|
||||
<p className="pt-2">
|
||||
Le règlement du jeu-concours a été déposé auprès de Maître Arnaud Rick,
|
||||
Commissaire de Justice. Il est consultable gratuitement sur simple demande
|
||||
à l'adresse contact@thetiptop.fr.
|
||||
à l'adresse thetiptop.gp4@gmail.com.
|
||||
</p>
|
||||
</div>
|
||||
),
|
||||
|
||||
@@ -59,15 +59,28 @@ export default function ReglesJeu() {
|
||||
<h2 className="text-2xl sm:text-3xl font-bold text-[#006B6B] mb-4 sm:mb-6 text-center">
|
||||
Que pouvez-vous gagner ?
|
||||
</h2>
|
||||
<p className="text-gray-600 text-base sm:text-lg text-center leading-relaxed mb-6 sm:mb-8">
|
||||
Tous les billets sont gagnants ! Les récompenses peuvent aller
|
||||
d'un infuseur à thé à un coffret découverte d'une valeur de 69€,
|
||||
en passant par des thés détox et des thés signatures.
|
||||
<p className="text-gray-600 text-base sm:text-lg text-center leading-relaxed mb-4 sm:mb-6">
|
||||
Tous les billets sont gagnants ! Selon votre ticket, vous remportez :
|
||||
</p>
|
||||
<ul className="text-gray-700 text-sm sm:text-base leading-relaxed space-y-2 max-w-md mx-auto mb-6 sm:mb-8">
|
||||
{[
|
||||
{ pct: '60 %', text: 'un infuseur à thé' },
|
||||
{ pct: '20 %', text: "une boîte de 100 g de thé détox ou d'infusion" },
|
||||
{ pct: '10 %', text: 'une boîte de 100 g de thé signature' },
|
||||
{ pct: '6 %', text: "un coffret découverte d'une valeur de 39 €" },
|
||||
{ pct: '4 %', text: "un coffret découverte d'une valeur de 69 €" },
|
||||
].map((lot) => (
|
||||
<li key={lot.pct} className="flex gap-2">
|
||||
<span className="font-semibold text-[#006B6B] flex-shrink-0">{lot.pct}</span>
|
||||
<span className="min-w-0 flex-1">des tickets : {lot.text}</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
<div className="bg-gray-100 rounded-xl p-4 sm:p-6 text-center">
|
||||
<h3 className="text-xl sm:text-2xl font-bold text-[#006B6B] mb-2">Grand gagnant</h3>
|
||||
<p className="text-gray-700 text-sm sm:text-base">
|
||||
Le participant tiré au sort remportera une année de thé d'une valeur de 360€ !
|
||||
Un tirage au sort, effectué sous le contrôle de Maître Arnaud Rick, Commissaire de
|
||||
Justice, désignera le gagnant d'une année de thé d'une valeur de 360€ !
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user