Blog
Formulaire de contact en panne ? Comment vraiment trouver pourquoi
· 5 min de lecture
« Mon formulaire de contact ne fonctionne pas » signifie généralement l'une d'environ six choses, et deviner laquelle fait perdre plus de temps que de vérifier. La bonne méthode consiste à passer en revue les causes par ordre de probabilité, en commençant par ce qui vous en apprend le plus en le moins de temps : ce qui est réellement arrivé à la requête au moment où elle a quitté le navigateur.
1. Vérifiez ce que la requête a réellement fait
Ouvrez la page, ouvrez les devtools, passez à l'onglet Network, et soumettez le formulaire vous-même. Deux choses cassent constamment ici :
- L'URL d'
actionest incorrecte - une clé API mal recopiée, une URL copiée depuis un ancien formulaire et jamais mise à jour, ou (fréquent au point d'être gênant) encore pointée verslocalhostdepuis le développement local et jamais basculée vers la production. - La requête part mais revient avec un statut d'erreur. Pas besoin de connaître la signification exacte de chaque code - une réponse 4xx ou 5xx suffit à indiquer que le problème est du côté du destinataire, pas dans votre HTML.
Si la requête ne part jamais du tout, ou part vers un domaine qui n'est manifestement pas votre backend de formulaire, c'est le bug, trouvé en moins d'une minute - avant même de chercher ailleurs.
2. Confirmez qu'elle est bien envoyée en POST
Un <form> sans method="POST" explicite utilise par défaut GET, qui ajoute vos champs à l'URL sous forme de chaîne de requête plutôt que d'envoyer un corps de requête - un endpoint de backend de formulaire n'acceptera généralement pas cela comme une soumission réelle. Vérifiez d'abord la balise elle-même.
Si le formulaire est soumis via JavaScript plutôt que par un POST natif du navigateur, l'échec le plus courant est un gestionnaire qui appelle e.preventDefault() pour bloquer la navigation par défaut, puis n'envoie en réalité jamais rien - un appel fetch cassé, une faute de frappe dans l'endpoint à l'intérieur du gestionnaire, ou un retour anticipé silencieux. preventDefault() sans requête fonctionnelle derrière est, pour le visiteur, indiscernable d'un formulaire mort : la page ne fait... rien.
3. Écartez la console, pas seulement le réseau
Pour toute soumission basée sur fetch, ouvrez l'onglet Console en plus de Network. Une erreur CORS, une requête de contenu mixte bloquée (soumission vers http:// depuis une page en https://), ou une exception non capturée dans le gestionnaire de soumission - tout cela arrête net la requête, et rien de tout ça ne produit d'erreur visible pour le visiteur. Ça ressemble juste à du silence, exactement ce à quoi ressemble un formulaire cassé vu de l'extérieur.
4. Vérifiez où la notification a réellement atterri
Si la requête de l'étape 1 est revenue avec un statut de succès, la soumission a bien atteint le backend - la seule question restante est où l'alerte est passée. Vérifiez d'abord les dossiers spam et promotions ; c'est de loin la raison la plus fréquente pour laquelle une notification « manquante » ne l'est pas vraiment. Si vous envoyez depuis un domaine personnalisé vérifié plutôt que depuis l'expéditeur par défaut, un enregistrement SPF ou DKIM mal configuré fera filtrer ou rejeter silencieusement les e-mails par le serveur de messagerie destinataire, ce qui ressemble en tous points, de votre côté, à « rien n'a été envoyé ».
5. Envisagez un rejet silencieux - limite de débit et honeypot cassé
Les soumissions légitimes sont parfois traitées comme suspectes. Tester plusieurs fois rapidement depuis la même IP pendant le débogage correspond exactement au schéma que la limitation de débit est censée détecter, et peut se déclencher sans aucune intention malveillante de votre part. Attendez quelques minutes et réessayez avant de supposer que quelque chose est cassé.
Un bug plus subtil, et réellement fréquent : le champ honeypot. La plupart des protections anti-spam incluent un champ caché que les vrais visiteurs ne voient ni ne remplissent jamais - si un bot le remplit, la soumission est silencieusement écartée. Une régression CSS (une classe renommée, une feuille de style qui ne se charge pas, un changement de mise en page qui « démasque » le mauvais élément) peut rendre ce champ visible aux vrais utilisateurs, qui sont alors soit déconcertés par un champ supplémentaire, soit - pire - le voient rempli automatiquement par un gestionnaire de mots de passe, ce qui déclenche le même filtre destiné aux bots. Si les soumissions ont commencé à échouer juste après une refonte ou un changement de CSS, c'est la première chose à vérifier.
Vérifiez le tableau de bord, pas seulement votre boîte de réception
La leçon générale derrière tout ce qui précède : « ai-je reçu un e-mail » n'est pas la même question que « la soumission est-elle arrivée », et confondre les deux est ce qui transforme ce type de bug en enquête de plusieurs jours au lieu de quelques minutes. Avec Formhook, chaque soumission qui atteint réellement le backend apparaît dans le tableau de bord, que l'e-mail de notification ait été livré ou non - la première vérification utile, avant toutes les étapes ci-dessus, consiste donc simplement à se connecter et à regarder. Si elle y est, le problème vient du côté notification (étapes 4-5). Si elle n'y est pas, le problème est en amont, avant même que la requête n'atteigne le backend (étapes 1-3).
À faire régulièrement, pas seulement quand quelque chose casse : la checklist de test avant lancement couvre le passage de quinze minutes qui détecte la plupart de ces problèmes avant qu'un vrai visiteur ne les rencontre. Et si vous évaluez un backend de formulaire et voulez voir à quoi ressemble un système qui fonctionne de bout en bout, la documentation et la page tarifs couvrent la configuration et le niveau gratuit.
Mettez en ligne un formulaire fonctionnel en une ligne
Hébergé dans l'UE, soumissions conservées indéfiniment, notifications push sur tous les niveaux.
Commencer gratuitementSans carte bancaire · consultez la documentation
Continuer la lecture
- Tester son formulaire de contact : la checklist de pré-lancementUn formulaire de contact cassé échoue et coûte des leads. Checklist de 15 minutes avant lancement : validation, spam, mobile, notifications.
- Spam des formulaires : honeypot, rate limiting, TurnstileComment le spam des formulaires fonctionne, et les trois couches qui l'arrêtent : honeypot, limitation de débit et Cloudflare Turnstile.
- Alternatives à reCAPTCHA pour les formulaires de contact (sans Google)Pourquoi Google reCAPTCHA est un choix par défaut discutable pour un formulaire de contact, et par quoi le remplacer : honeypot, limitation de débit et Cloudflare Turnstile.