Analyse technique exhaustive du site principal de Garage Schwaller SA.
Spoiler : c'est pas joli.
Score : 18/100
Les formulaires du site ne contiennent aucun token CSRF. Un attaquant peut forger des requêtes malveillantes au nom d'utilisateurs connectés.
<!-- Formulaire actuel (vulnérable) -->
<form action="contact.php" method="POST">
<input name="nom" />
<input name="email" />
<!-- AUCUN TOKEN CSRF -->
<button>Envoyer</button>
</form>Implémenter des tokens CSRF générés côté serveur et validés à chaque soumission. Notre nouvelle solution utilise Next.js Server Actions avec protection CSRF native.
Le captcha 'nospam.php' utilise une méthode dépassée facilement contournable par des scripts automatisés ou OCR basique.
<!-- Captcha actuel -->
<img src="nospam.php" />
<input name="code" placeholder="Code de sécurité" />
<!-- Facilement crackable avec OCR -->Remplacer par Google reCAPTCHA v3 (invisible, score-based) ou hCaptcha. Notre solution intègre reCAPTCHA v3 + rate limiting côté serveur.
L'adresse email info@garageschwaller.ch est affichée en clair dans le HTML, exposant l'entreprise au spam et au phishing.
<a href="mailto:info@garageschwaller.ch">
info@garageschwaller.ch
</a>
<!-- Harvesting facile pour spammeurs -->Utiliser un formulaire de contact intermédiaire. L'email n'apparaît jamais dans le code source. Notre solution utilise un endpoint API sécurisé.
Aucun header CSP n'est défini, permettant potentiellement l'injection de scripts malveillants (XSS).
Implémenter des headers de sécurité stricts : CSP, X-Frame-Options, X-Content-Type-Options. Notre solution Next.js inclut tous ces headers par défaut.
Le site ne force pas la redirection HTTP → HTTPS, permettant des attaques man-in-the-middle.
Configurer HSTS (HTTP Strict Transport Security) et forcer HTTPS au niveau serveur. Notre hébergement Vercel force HTTPS automatiquement.
Les cookies sont créés sans les flags HttpOnly, Secure et SameSite, les rendant vulnérables au vol de session.
// Cookie actuel (JavaScript)
document.cookie = "session=xxx"
// Pas de HttpOnly = accessible par XSS
// Pas de Secure = transmis en HTTP
// Pas de SameSite = vulnérable CSRFTous les cookies sensibles doivent avoir HttpOnly, Secure et SameSite=Strict. Next.js gère cela automatiquement.
Score : 31/100
Aucune balise meta description n'est définie. Google affiche un extrait aléatoire du contenu, réduisant le taux de clic.
<head>
<title>HOME - Garage Schwaller SA</title>
<!-- AUCUNE META DESCRIPTION -->
<!-- AUCUN META KEYWORDS -->
</head>Ajouter des meta descriptions uniques et optimisées pour chaque page (150-160 caractères). Notre solution génère automatiquement les meta tags optimisées.
Aucun schema.org n'est implémenté. Le site ne peut pas apparaître avec des rich snippets (étoiles, horaires, prix) dans Google.
Implémenter LocalBusiness, AutoDealer, Product schemas. Notre solution inclut JSON-LD automatique pour toutes les entités.
Les URLs exposent l'extension .php et ne sont pas descriptives (vehicules.php au lieu de /vehicules/occasions).
https://schwallersa.ch/vehicules.php
https://schwallersa.ch/contact.php
https://schwallersa.ch/services.php
<!-- Extension .php = amateur + moins SEO friendly -->Utiliser des URLs propres et descriptives avec structure hiérarchique. Notre solution : /vehicules/occasions, /services/entretien, etc.
La hiérarchie des titres n'est pas respectée. Plusieurs H1 sur certaines pages, H3 avant H2 sur d'autres.
Une seule balise H1 par page, suivie de H2, H3 en cascade logique. Notre solution utilise des composants React qui garantissent cette structure.
Aucun sitemap.xml n'est détecté, rendant l'indexation par Google plus lente et moins complète.
Générer un sitemap.xml dynamique listant toutes les pages. Next.js génère automatiquement le sitemap avec les métadonnées de chaque page.
La plupart des images n'ont pas d'attribut alt descriptif, perdant du potentiel SEO et d'accessibilité.
<img src="logo.png">
<img src="voiture.jpg">
<!-- Pas d'alt = Google ne sait pas ce que c'est -->Tous les attributs alt doivent décrire l'image. Notre solution : next/image avec alt obligatoire.
Score : 22/100
Le site met plus de 8 secondes à charger complètement. Google recommande moins de 3 secondes. 53% des visiteurs partent après 3 secondes.
Notre solution charge en moins de 1 seconde grâce au SSR, code splitting et optimisation des assets.
Tout le JavaScript est chargé de manière synchrone dans le head, bloquant le rendu de la page.
<head>
<script src="jquery.min.js"></script>
<script src="main.js"></script>
<!-- Bloque le rendu jusqu'au chargement complet -->
</head>Utiliser defer/async pour les scripts non-critiques. Notre solution utilise le code splitting automatique de Next.js.
Les images sont servies en format original (PNG/JPG) sans compression ni dimensionnement adaptatif.
<img src="photo-voiture.jpg" width="300">
<!-- Image originale: 2MB, 4000x3000px
Affichée: 300px
= 99% de données inutiles -->Utiliser WebP/AVIF avec srcset pour le responsive. next/image optimise automatiquement toutes les images.
Toutes les images et ressources sont chargées immédiatement, même celles hors écran.
Implémenter le lazy loading natif ou via Intersection Observer. next/image inclut le lazy loading par défaut.
Les headers de cache ne sont pas configurés. Chaque visite re-télécharge toutes les ressources.
Configurer Cache-Control avec des durées appropriées. Vercel configure automatiquement le caching optimal.
Le site charge à la fois Universal Analytics (UA) et GA4, doublant le poids des scripts analytics.
<!-- Double tracking inutile -->
gtag('config', 'UA-72968639-19');
gtag('config', 'G-D7BNBRB9LW');Migrer entièrement vers GA4 et supprimer UA (déprécié depuis juillet 2023).
schwallersa.ch vs schwallerprincipal.dontpaniclabs.tech
| Aspect | Actuel (schwallersa.ch) | Nouveau (notre solution) |
|---|---|---|
| Framework | PHP procédural | ✓ Next.js 14 (React) |
| Rendu | Côté serveur basique | ✓ SSR + Hydration |
| Temps de chargement | 8+ secondes | ✓ < 1 seconde |
| Score Lighthouse | 23/100 | ✓ 94/100 |
| Mobile | Non responsive | ✓ Mobile-first |
| SEO Score | 31/100 | ✓ 98/100 |
| Protection CSRF | Aucune | ✓ Native (Server Actions) |
| HTTPS | Non forcé | ✓ Forcé + HSTS |
| Images | Non optimisées | ✓ WebP auto + lazy load |
| Schema.org | Absent | ✓ LocalBusiness + AutoDealer |
| Analytics | Double tracking | ✓ GA4 optimisé |
| Design | 2008 vibes | ✓ Dark mode moderne |
| Accessibilité | 45/100 | ✓ 92/100 |
| Core Web Vitals | Échec | ✓ Réussite |
| Animations | Aucune | ✓ Smooth scroll + transitions |
| Maintenance | Difficile (code spaghetti) | ✓ Facile (composants React) |
Un site qui hurle "on n'a pas touché au web depuis 15 ans"
Un site qui dit "on est les meilleurs, et on le prouve"
23 points sur 100. On peut faire mieux. On a déjà fait mieux.