Dépasser les formulaires intégrés

Dépasser les formulaires intégrés8 min de lecture

Limite de Netlify Forms : ce qui se passe à 100 soumissions, et comment en sortir

Les anciennes offres Netlify comptent les soumissions de formulaire par site et vous font passer automatiquement au niveau supérieur, et les offres à crédits peuvent mettre le site en pause, alors déplacez le formulaire vers un backend.

Preet SutharFondateur, Ikiform

Sur les anciennes offres de Netlify, chaque site inclut 100 soumissions de formulaire par mois, et les dépasser fait passer automatiquement le site à un niveau Forms payant. Sur les offres à crédits des comptes créés depuis septembre 2025, les formulaires sont gratuits, mais une équipe gratuite à court de crédits voit tous ses sites mis en pause, formulaires compris. Déplacer le formulaire vers Ikiform consiste à retirer les attributs Netlify et à définir l'action, en HTML simple ou dans n'importe quel framework.

Ce qui change sur Netlify

Netlify n'est pas un créateur de sites ; c'est un hébergeur avec des formulaires intégrés. Cela détermine à la fois la limite et la façon d'en sortir. La limite qui s'applique dépend de la date de création de votre compte :

CompteCe que dit la documentation de NetlifyCe que cela signifie pour un formulaire très sollicité
Anciennes offres, créées avant le 4 septembre 2025Forms Level 0 inclut 100 soumissions et 10 Mo d'envois de fichiers par site et par mois. Le dépasser fait passer le site à Forms Level 1, avec 1 000 soumissions, facturé en fin de cycle de facturation. Au-delà, des forfaits d'utilisation supplémentaires ajoutent 500 soumissions à la foisUne vague de spam peut faire passer un site à un niveau payant sans que personne ne l'ait décidé. Sur l'ancien niveau gratuit, atteindre une limite met en pause tous les sites du compte
Offres à crédits, créées depuisLes soumissions de formulaire sont gratuites et illimitées, sans niveauxLe formulaire lui-même ne coûte rien. Mais quand une équipe gratuite épuise ses crédits mensuels, Netlify met en pause tous ses projets, et les projets en pause ne reçoivent pas de soumissions de formulaire

La documentation de Netlify indique clairement que le passage au niveau supérieur sur les anciennes offres est automatique et que vous ne pouvez pas redescendre tant que l'utilisation dépasse le niveau inférieur. Vérifiez le type d'offre de votre équipe et l'utilisation des formulaires du site dans le tableau de bord Netlify avant de décider quoi que ce soit.

La seconde raison de migrer n'a rien à voir avec les chiffres. Netlify Forms fonctionne en lisant votre HTML déployé :

  • Les formulaires sont détectés au déploiement. Un formulaire rendu par React, Vue ou Svelte n'existe pas dans ce HTML, donc vous gardez une copie statique masquée que le build peut trouver, et vous y envoyez avec un champ form-name.
  • Avec Next.js, l'adaptateur OpenNext a besoin de cette copie sous forme de fichier statique dans public/, et l'envoi doit aller vers ce fichier statique, pas vers une page Next.js. Le build échoue si data-netlify apparaît dans le code React sans cette copie.
  • Les soumissions doivent être en urlencoded ou multipart. Le JSON n'est pas accepté.
  • Le formulaire ne fonctionne que tant que le site est déployé sur Netlify. Changer d'hébergeur implique de déplacer les formulaires.
Comment l'utilisation des formulaires d'un site Netlify sur une ancienne offre grimpe en un mois, et ce que change l'envoi vers IkiformAncienne offre, un site, un moisFormulaire qui envoie vers IkiformLevel0100soumissionsinclusessoumission101le spamcompteaussiLevel11 000par mois,facturéesforfaitssupplémentaires500 depluschacunmêmepagesurNetlifyendpointIkiformsimpleadressed'envoiNetlifyFormsrien àcompterpassage automatiqueenvoiComment l'utilisation des formulaires d'un site Netlify sur une ancienne offre grimpe en un mois, et ce que change l'envoi vers IkiformAncienne offre, un site, un moisFormulaire qui envoie vers IkiformLevel 0100 soumissions inclusessoumission 101le spam compte aussiLevel 11 000 par mois, facturéesforfaits supplémentaires500 de plus chacunmême page sur Netlifyendpoint Ikiformsimple adresse d'envoiNetlify Formsrien à compterpassage automatiqueenvoi
  1. Sur une ancienne offre, un site commence le mois au Forms Level 0 avec 100 soumissions incluses.
  2. La soumission 101 arrive. La documentation de Netlify sur l'utilisation décrit l'utilisation du site, donc une rafale de spam peut suffire à le faire dépasser.
  3. Netlify fait passer le site à Forms Level 1, avec 1 000 soumissions, et le facture en fin de cycle.
  4. Au-delà du Level 1, des forfaits d'utilisation supplémentaires ajoutent 500 soumissions à la fois.
  5. Avec le formulaire qui envoie vers Ikiform, la page reste sur Netlify mais l'envoi part vers l'endpoint Ikiform.
  6. Netlify Forms ne reçoit jamais l'envoi, donc il n'a rien à compter ni à faire passer au niveau supérieur.
L'hébergement reste sur Netlify. Seule la destination du formulaire change, et avec elle le comptage.

Déplacer le formulaire, stack par stack

Avant de modifier le moindre code, créez un formulaire Ikiform par nom de formulaire Netlify et réglez son Honeypot field sur bot-field. Votre input masqué existant continue alors de servir de honeypot, sans renommage. Choisissez votre stack :

Le HTML simple sur Netlify demande le moins de changements. Supprimez les attributs Netlify et l'input form-name, faites pointer action vers l'endpoint, et déplacez le chemin de remerciement dans _redirect sous forme d'URL complète. L'input bot-field reste votre honeypot.

<form name="contact" method="POST" action="/thanks" data-netlify="true" netlify-honeypot="bot-field">
  <input type="hidden" name="form-name" value="contact" />
  <p hidden><input name="bot-field" /></p>
  <label>Email <input type="email" name="email" required /></label>
  <label>Topic
    <select name="topic">
      <option value="question">A question</option>
      <option value="bug">Something is broken</option>
      <option value="work">Working together</option>
    </select>
  </label>
  <label>Message <textarea name="message" required></textarea></label>
  <button type="submit">Send</button>
</form>
Les versions TanStack Start et React Router envoient depuis votre serveur. Les versions côté serveur envoient avec une clé secrète, donc Ikiform ignore Allowed domains et sa vérification humaine. Chaque envoi vient alors de l'IP de votre serveur, et la limite Standard de 5 par minute et par visiteur compte tous vos visiteurs ensemble. Choisissez la limite de débit Relaxed ou Custom pour un formulaire que vous envoyez via un serveur, et gardez IKIFORM_SECRET_KEY dans des variables d'environnement réservées au serveur.

Chaque version garde les mêmes noms de champs que sous Netlify, donc les e-mails de notification et les colonnes CSV restent familiers. La comparaison avec Netlify Forms contient la correspondance complète des attributs, y compris data-netlify-recaptcha et les inputs de fichier.

Deploy previews et domaines autorisés

Netlify donne à chaque pull request sa propre adresse, comme deploy-preview-42--your-site.netlify.app. Ce n'est pas un sous-domaine de your-site.netlify.app, donc lister l'adresse de votre site sous Allowed domains ne couvre pas les previews, et les envois depuis une preview finissent en spam avec origin_mismatch.

  • Ajoutez your-site.netlify.app et votre domaine personnalisé pour la production.
  • Ajoutez un hôte de preview précis pendant que vous le testez, puis retirez-le.
  • N'ajoutez pas netlify.app seul. Tous les sites sur Netlify seraient autorisés à envoyer vers votre formulaire.
  • Ou faites pointer les previews vers un second formulaire Ikiform sans domaines autorisés, via une variable d'environnement, et gardez la production stricte.

Basculer sans perdre de soumissions

  1. Téléchargez les soumissions passées de chaque formulaire en CSV depuis la section Forms du site. Ikiform n'a pas d'import.
  2. Déployez le nouveau formulaire sur une preview et envoyez un test. Vérifiez les noms de champs dans le tableau de bord Ikiform.
  3. Fusionnez en production et envoyez un autre test depuis le domaine de production.
  4. Remplacez tout webhook sortant de Netlify par un webhook Ikiform. Netlify signe avec un jeton JWS ; Ikiform utilise les en-têtes Standard Webhooks, donc votre vérificateur change aussi.
  5. Quand aucun envoi n'a atteint Netlify depuis quelques jours, désactivez la détection de formulaires dans les paramètres Forms du site.
Netlify accepte l'envoi de fichiers et passe chaque soumission dans Akismet. L'envoi de fichiers n'est pas encore pris en charge. Un envoi avec un fichier reçoit 422 files_not_supported. Si un formulaire a besoin de fichiers, gardez ce formulaire-là sur Netlify Forms et déplacez les autres.

Vérifier que tout fonctionne sur Netlify

  1. Dans Allowed domains du formulaire, ajoutez le domaine de votre site, plus localhost pendant le développement. Laissez vide pour accepter les envois de partout.
  2. Déployez une preview, ajoutez son hôte et envoyez le formulaire depuis cette preview.
  3. Ouvrez Submissions dans le tableau de bord. La nouvelle soumission y est, avec tous les champs envoyés.
  4. Vérifiez que les champs sont email, topic et message, sans form-name ni bot-field.
  5. Ouvrez l'onglet Forms du site dans Netlify et vérifiez que le test n'y figure pas.
  6. Envoyez une fois avec bot-field rempli. L'envoi est stocké comme spam et ne déclenche rien.
  7. Vérifiez la boîte de réception de chaque destinataire des notifications. Chacun reçoit un e-mail avec les champs, et Reply répond à l'expéditeur quand le formulaire a un champ email.

Pièges

ProblèmeQue faire
Un champ form-name apparaît dans IkiformL'input masqué form-name est toujours dans le formulaire, ou votre code le définit encore. Retirez-le ; Ikiform identifie le formulaire par l'URL.
Le build Next.js échoue en mentionnant les formulairesUn attribut netlify ou data-netlify est encore dans votre code React. Retirez-le, ainsi que public/__forms.html.
Les previews envoient en spamL'hôte de preview ne figure pas dans Allowed domains. Ajoutez-le pendant vos tests, ou utilisez un second formulaire pour les previews.
Chaque envoi est marqué comme spam, même les vraisHoneypot field est encore _gotcha alors que votre input est bot-field, ou l'inverse. Faites-les correspondre.
422 files_not_supportedLe formulaire a un <input type="file"> avec un fichier choisi. L'envoi de fichiers n'est pas encore pris en charge ; retirez l'input ou demandez plutôt un lien.
429 rate_limitedUn visiteur a envoyé plus que ce que permet la limite de débit du formulaire. Standard autorise 5 envois par minute et par visiteur. Attendez la durée de Retry-After, ou choisissez Relaxed ou Custom pour les formulaires qui envoient depuis une seule IP partagée.

Questions

Une étape vous bloque, ou vous voulez un guide pour votre cas ? Écrivez à hello@ikiform.com.