Étude

Intégration CRM à Nyon: formulaires WordPress vers HubSpot avec tracking GA4 et suivi des leads

Intégration CRM à Nyon (Vaud): formulaires WordPress reliés à HubSpot, suivi des leads, automatisations simples et tracking GA4. Objectif: éviter la perte de demandes et piloter la génération de leads.

Contexte

Une PME à Nyon utilisait WordPress pour la génération de leads, avec plusieurs formulaires (contact, demande d’offre, téléchargement). Les demandes arrivaient parfois par e-mail, parfois via un export manuel, et le suivi commercial se faisait dans HubSpot de manière inconstante. Résultat: des leads se perdaient, et l’équipe ne pouvait pas relier clairement les demandes aux pages d’entrée et aux actions marketing.

Objectifs

  • Centraliser les leads dans HubSpot, sans manipulations manuelles.
  • Uniformiser les formulaires et améliorer l’expérience mobile.
  • Ajouter un tracking GA4 utile: envoi formulaire, type de demande, source.
  • Mettre en place des automatisations simples: tags, notifications, attribution.
  • Rendre le système robuste: anti-spam discret, logs, tests et maintenance.

Diagnostic initial

  • Formulaires : champs variables d’un formulaire à l’autre, messages de confirmation peu clairs.
  • CRM : imports irréguliers, doublons, historique incomplet côté HubSpot.
  • Mesure : GA4 présent, mais conversion non standardisée selon le formulaire.
  • Fiabilité : spam ponctuel et absence de log centralisé.

Solution mise en place

1) Standardisation des formulaires

  • Champs harmonisés: nom, e-mail, téléphone (optionnel), type de demande, message.
  • Micro-copies rassurantes: délai de réponse, confidentialité, étapes suivantes.
  • Validation claire: succès, erreurs, et état de soumission visible.

2) Connexion à HubSpot

  • Envoi des leads via API ou connecteur officiel selon le formulaire utilisé.
  • Création de propriétés: type de demande, page d’origine, campagne, consentement.
  • Déduplication côté HubSpot (e-mail) et règles d’attribution.

3) Automatisations simples

  • Attribution de tags selon le type de demande (p. ex. « offre », « support », « partenariat »).
  • Notification interne (e-mail ou Slack) uniquement pour les demandes qualifiées.
  • Création d’une tâche commerciale automatique pour les leads à forte intention.

4) Tracking GA4 et qualité des données

  • Événement GA4 unique (lead_submit) + paramètre (lead_type).
  • Contrôle des pages d’entrée et des chemins via rapports GA4.
  • Vérification Search Console: pages qui génèrent du trafic utile.

5) Anti-spam et exploitation

  • Protection anti-spam discrète (honeypot, rate limit, reCAPTCHA selon cas).
  • Logs de soumission (statut, timestamp, type) pour diagnostiquer rapidement.
  • Routine de contrôle mensuel (formulaires, intégration, taux d’erreur).

Exemple technique : événement GA4 unique + paramètre (lead_type)

Objectif: un seul événement, lisible et exploitable.

<script>
function ccTrackLeadSubmit(leadType){
  if (typeof window.gtag !== 'function') return;
  window.gtag('event', 'lead_submit', {
    event_category: 'Conversion',
    lead_type: String(leadType || 'unknown')
  });
}
// Exemple d'appel après succès formulaire:
// ccTrackLeadSubmit('offre');
</script>

Exemple technique : envoi HubSpot via webhook (serveur)

Version minimaliste. À intégrer dans un endpoint sécurisé côté serveur (jamais en front).

<?php
// Exemple: endpoint WordPress (REST) pour relayer vers HubSpot.
// À sécuriser (nonce, token, rate limit).
add_action('rest_api_init', function () {
  register_rest_route('cc/v1', '/hubspot', [
    'methods'  => 'POST',
    'callback' => function (WP_REST_Request $req) {
      $body = $req->get_json_params();
      if (empty($body['email'])) {
        return new WP_REST_Response(['ok' => false, 'error' => 'missing_email'], 400);
      }

      $payload = [
        'properties' => [
          ['property' => 'email', 'value' => sanitize_email($body['email'])],
          ['property' => 'firstname', 'value' => sanitize_text_field($body['firstname'] ?? '')],
          ['property' => 'lastname', 'value' => sanitize_text_field($body['lastname'] ?? '')],
          ['property' => 'message', 'value' => sanitize_textarea_field($body['message'] ?? '')],
          ['property' => 'lead_type', 'value' => sanitize_text_field($body['lead_type'] ?? 'unknown')],
          ['property' => 'page_url', 'value' => esc_url_raw($body['page_url'] ?? '')],
        ],
      ];

      // IMPORTANT: stocker la clé API dans une variable d'environnement, pas en dur.
      $hubspotUrl = 'https://api.hubapi.com/contacts/v1/contact?hapikey=' . getenv('HUBSPOT_HAPIKEY');

      $resp = wp_remote_post($hubspotUrl, [
        'headers' => ['Content-Type' => 'application/json'],
        'body'    => wp_json_encode($payload),
        'timeout' => 12,
      ]);

      if (is_wp_error($resp)) {
        return new WP_REST_Response(['ok' => false, 'error' => $resp->get_error_message()], 500);
      }

      return new WP_REST_Response(['ok' => true], 200);
    },
    'permission_callback' => '__return_true',
  ]);
});

Exemple technique : honeypot simple (anti-spam)

Discret et efficace contre les bots basiques.

<div style="position:absolute;left:-9999px" aria-hidden="true">
  <label for="company">Company</label>
  <input id="company" name="company" tabindex="-1" autocomplete="off">
</div>

Résultats observés

  • Leads centralisés dans HubSpot, avec moins de pertes et moins de tâches manuelles.
  • Suivi GA4 plus utile: conversion par type de demande et page d’entrée.
  • Automatisations simples qui accélèrent la prise en charge commerciale.
  • Formulaires plus clairs, donc meilleure qualité des demandes et moins d’aller-retours.

Points clés à retenir

  • Un CRM apporte de la valeur quand les données sont standardisées et fiables.
  • Un seul événement GA4 bien défini vaut mieux que dix événements confus.
  • Les automatisations utiles restent simples: tag, notification, tâche, et c’est tout.

Un projet similaire ou un souci WordPress ?

Que ce soit pour lancer un projet, améliorer un site existant ou résoudre un problème, on vous aide à clarifier la situation et à avancer simplement.