<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tibow Webdesign</title>
	<atom:link href="https://thibautsoufflet.fr/feed/" rel="self" type="application/rss+xml" />
	<link>https://thibautsoufflet.fr/</link>
	<description>Développeur spécialiste WordPress à Bordeaux</description>
	<lastBuildDate>Mon, 03 Aug 2026 13:37:28 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://thibautsoufflet.fr/wp-content/uploads/2025/05/cropped-favicon-tibowwebdesign-32x32.png</url>
	<title>Tibow Webdesign</title>
	<link>https://thibautsoufflet.fr/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Fin du connecteur Net Reviews : migrer WooCommerce vers l&#8217;API Purchase Events d&#8217;Avis Vérifiés (Skeepers)</title>
		<link>https://thibautsoufflet.fr/blog/migrer-woocommerce-api-avis-verifies-net-reviews/</link>
					<comments>https://thibautsoufflet.fr/blog/migrer-woocommerce-api-avis-verifies-net-reviews/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Thu, 30 Jul 2026 08:20:39 +0000</pubDate>
				<category><![CDATA[WooCommerce]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=8011</guid>

					<description><![CDATA[<p>Si vous gérez une boutique WooCommerce et que vous utilisez Avis Vérifiés (Skeepers) pour collecter les avis de vos clients, vous avez probablement reçu un mail qui a de quoi inquiéter : "Nous vous informons qu'à compter du 22 novembre, le connecteur WooCommerce que vous utilisez actuellement pour nous transmettre vos commandes ne sera plus [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/migrer-woocommerce-api-avis-verifies-net-reviews/">Fin du connecteur Net Reviews : migrer WooCommerce vers l&rsquo;API Purchase Events d&rsquo;Avis Vérifiés (Skeepers)</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si vous gérez une boutique WooCommerce et que vous utilisez Avis Vérifiés (Skeepers) pour collecter les avis de vos clients, vous avez probablement reçu un mail qui a de quoi inquiéter :</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="345" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/unnamed-1024x345.jpg" alt="Logo Avis Vérifiés by Skeepers" class="wp-image-8021 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/unnamed-1024x345.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/unnamed-300x101.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/unnamed-768x259.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/unnamed.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-background wp-block-paragraph" style="background-color:#1296b017"><em>"Nous vous informons qu'à compter du 22 novembre, le connecteur WooCommerce que vous utilisez actuellement pour nous transmettre vos commandes ne sera plus maintenu. [...] Passé cette date, nous ne pourrons plus garantir le bon fonctionnement de ce connecteur ni intervenir en cas d'interruption."</em></p>
</blockquote>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">En clair : le <a href="https://fr.wordpress.org/plugins/netreviews/">plugin <strong>Net Reviews</strong></a>, historiquement utilisé par de nombreuses boutiques WooCommerce pour transmettre automatiquement les commandes à Avis Vérifiés, arrive en fin de vie. Sans action de votre part, vos clients cesseront progressivement de recevoir des demandes d'avis après un achat (avis produits/marque).</p>



<p class="wp-block-paragraph">Skeepers propose deux alternatives : un envoi par <strong>SFTP</strong> (fichiers déposés périodiquement), ou une intégration via leur <strong>nouvelle API Purchase Events</strong>. Dans cet article, je vous montre comment j'ai mis en place la seconde option qui est plus fiable, en temps réel, et qui ne dépend d'aucun plugin tiers non maintenu.</p>



<p class="wp-block-paragraph">L'approche que je détaille ici a un avantage clé : <strong>pas de serveur intermédiaire à héberger</strong>. Tout se passe directement dans WordPress, via un petit plugin custom qui se branche sur les hooks WooCommerce natifs.</p>



<h2 class="wp-block-heading">L'essentiel à savoir</h2>



<ul class="wp-block-list">
<li>Le connecteur <strong>Net Reviews</strong> pour WooCommerce ne sera plus maintenu par Skeepers à partir du <strong>22 novembre 2026</strong></li>



<li>Skeepers propose deux alternatives : <strong>SFTP</strong> ou <strong>API Purchase Events</strong></li>



<li>Solution présentée ici : un <strong>plugin WordPress custom</strong> (une centaine de lignes de PHP), sans service tiers à héberger</li>



<li>Le plugin s'authentifie via <strong>OAuth2</strong> puis envoie chaque commande WooCommerce à l'API Skeepers au moment choisi (paiement confirmé, commande terminée, etc.)</li>



<li>Deux pièges fréquents à connaître : le <strong>plafond de pression marketing</strong> et le <strong>catalogue produit recalculé chaque nuit</strong></li>
</ul>



<h2 class="wp-block-heading">Pourquoi ne pas simplement utiliser un plugin existant ?</h2>



<p class="wp-block-paragraph">C'est la question que je me suis posée en premier. À l'heure où j'écris cet article, il n'existe pas encore de plugin WordPress officiel maintenu par Skeepers pour cette nouvelle API.<br><br>Plutôt que d'attendre ou de dépendre d'un service tiers externe (un serveur Node.js à héberger séparément, par exemple), j'ai opté pour la solution la plus directe : un plugin WordPress "maison" et simple d'une centaine de lignes, qui s'accroche directement aux événements WooCommerce.</p>



<h2 class="wp-block-heading">Étape 1 : Récupérer vos identifiants API</h2>



<p class="wp-block-paragraph">Tout commence dans votre back-office Avis Vérifiés :</p>



<ol class="wp-block-list">
<li>Connectez-vous sur <a href="https://app.netreviews.eu/">https://app.netreviews.eu/</a></li>



<li>Rendez-vous dans <strong>Collecte des avis</strong> &gt; <strong>Configuration</strong></li>



<li>Onglet <strong>API</strong></li>



<li>Cliquez sur <strong>Créer votre compte API</strong> pour générer un <code>Client ID</code> et un <code>Client secret</code></li>
</ol>



<p class="wp-block-paragraph">Conservez précieusement ces deux valeurs.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a255270&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a255270" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="494" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/configuration-de-la-collecte-davis-back-office-avis-verifies-1024x494.jpg" alt="Configuration de la collecte d'avis par API dans le back-office d'Avis Vérifiés" class="wp-image-8040 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/configuration-de-la-collecte-davis-back-office-avis-verifies-1024x494.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/configuration-de-la-collecte-davis-back-office-avis-verifies-300x145.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/configuration-de-la-collecte-davis-back-office-avis-verifies-768x371.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/configuration-de-la-collecte-davis-back-office-avis-verifies.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">Il faut également retrouver le <strong><code>website_id</code></strong>, un identifiant UUID propre à votre site. Pour cela, allez dans <strong>Gestion du compte &gt; Mon Compte</strong>. Le <strong><code>website_id</code></strong> se trouvent alors à droite de la page dans le bloc nommé "Code d'intégration".</p>



<h2 class="wp-block-heading">Étape 2 : Comprendre l'authentification de l'API</h2>



<p class="wp-block-paragraph">L'API Purchase Events utilise le protocole OAuth2 (client credentials). Avant de pouvoir envoyer une commande, il faut obtenir un <strong>token d'accès</strong> via une requête <code>POST</code> :</p>



<pre class="wp-block-code"><code class="">POST https://auth.skeepers.io/realms/skeepers/protocol/openid-connect/token
Authorization: Basic &lt;base64(client_id:client_secret)&gt;
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&amp;scope=openid
</code></pre>



<p class="wp-block-paragraph">La réponse contient un <code>access_token</code> valable une durée limitée (<code>expires_in</code>, généralement quelques minutes). Ce token doit ensuite être passé en en-tête <code>Authorization: Bearer &lt;token&gt;</code> sur l'appel suivant, celui qui envoie réellement la commande :</p>



<pre class="wp-block-code"><code class="">POST https://api.skeepers.io/purchase-event/websites/{website_id}/purchase_events/bulk_sync_insert
</code></pre>



<h3 class="wp-block-heading">Avec quel outil tester cette requête ?</h3>



<p class="wp-block-paragraph">Avant même d'écrire la moindre ligne de PHP, je vous recommande de tester cette authentification en ligne de commande, pour vérifier que vos identifiants fonctionnent. L'outil à utiliser dépend de votre système d'exploitation :</p>



<p class="wp-block-paragraph"><strong>Sur Mac (ou Linux)</strong></p>



<p class="wp-block-paragraph"><code>curl</code> est installé nativement. Ouvrez l'application <strong>Terminal</strong> et lancez directement :</p>



<pre class="wp-block-code"><code class="">curl -X POST "https://auth.skeepers.io/realms/skeepers/protocol/openid-connect/token" \
  -u "votre_client_id:votre_client_secret" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&amp;scope=openid"</code></pre>



<p class="wp-block-paragraph"><strong>Sur Windows</strong></p>



<p class="wp-block-paragraph">Deux options :</p>



<ul class="wp-block-list">
<li><strong>PowerShell</strong> (pré-installé) : depuis Windows 10, la commande ci-dessus fonctionne donc telle quelle dans PowerShell.</li>



<li><strong>Git Bash</strong> (installé avec <a href="https://git-scm.com/download/win">Git for Windows</a>) : si vous l'avez déjà sur votre machine (courant chez les développeurs), il reproduit un environnement Bash identique à Mac/Linux, avec <code>curl</code> disponible nativement.</li>
</ul>



<p class="wp-block-paragraph"><strong>Alternative avec interface graphique (recommandée si vous n'êtes pas à l'aise avec le terminal)</strong></p>



<p class="wp-block-paragraph">Des outils comme <strong>Postman</strong> ou <strong>Insomnia</strong> (gratuits, disponibles sur Mac et Windows) permettent de construire et tester ces requêtes API via une interface visuelle, sans taper de ligne de commande. C'est souvent plus confortable pour une première prise en main : vous renseignez l'URL, les en-têtes et le corps de la requête dans des champs dédiés, puis cliquez sur "Send" pour voir la réponse.</p>



<h2 class="wp-block-heading">Étape 3 : Choisir le bon déclencheur WooCommerce</h2>



<p class="wp-block-paragraph">C'est le point sur lequel je me suis le plus attardé, car le choix du hook WooCommerce change complètement le comportement de l'intégration. WooCommerce propose plusieurs événements possibles :</p>



<ul class="wp-block-list">
<li><strong><code>woocommerce_checkout_order_processed</code></strong> — Se déclenche dès que le client valide sa commande, <strong>avant</strong> confirmation du paiement. Rapide, mais risque d'envoyer des commandes jamais payées.</li>



<li><strong><code>woocommerce_payment_complete</code></strong> — Se déclenche dès que le paiement est confirmé. Bon compromis : la commande est réellement payée, sans attendre un traitement manuel.</li>



<li><strong><code>woocommerce_order_status_completed</code></strong> — Se déclenche quand la commande est manuellement marquée "Terminée" (souvent à l'expédition). Fiable, mais peut être tardif si les commandes ne sont pas clôturées rapidement par votre équipe.</li>
</ul>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Point important à noter : contrairement à ce qu'on pourrait penser, <strong>le simple fait d'avoir des articles dans le panier ou de consulter la page de paiement ne déclenche rien</strong>. Il faut que le client valide effectivement sa commande.</p>



<p class="wp-block-paragraph">Pour ma part, j'ai commencé avec <code>woocommerce_order_status_completed</code> (le plus simple à tester), avant d'envisager de basculer sur <code>woocommerce_payment_complete</code> pour ne pas dépendre d'une clôture manuelle des commandes.</p>



<h2 class="wp-block-heading">Étape 4 : Le plugin complet</h2>



<p class="wp-block-paragraph">Voici le plugin que j'utilise, sous forme d'un fichier unique à placer dans <code>wp-content/plugins/</code>. Il gère :</p>



<ul class="wp-block-list">
<li>La récupération et la mise en cache du token (pour éviter de le redemander à chaque commande)</li>



<li>La construction du payload à partir de la commande WooCommerce</li>



<li>L'envoi à l'API Skeepers</li>



<li>Un marqueur anti-doublon (une commande n'est envoyée qu'une seule fois)</li>



<li>Des logs pour faciliter le debug</li>
</ul>



<pre title="Plugin Skeepers Purchase Events" class="wp-block-code"><code lang="php" class="language-php line-numbers">&lt;?php
/**
 * Plugin Name: Skeepers Purchase Events
 * Description: Envoie automatiquement chaque commande WooCommerce vers l'API Purchase Events de Skeepers.
 * Version: 1.0
 * Author: Thibaut Soufflet
 * Author URI: https://thibautsoufflet.fr
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

// À adapter avec vos identifiants (voir remarque sécurité plus bas)
define( 'SKEEPERS_CLIENT_ID', 'votre_client_id' );
define( 'SKEEPERS_CLIENT_SECRET', 'votre_client_secret' );
define( 'SKEEPERS_WEBSITE_ID', 'votre_website_id' );

define( 'SKEEPERS_AUTH_URL', 'https://auth.skeepers.io/realms/skeepers/protocol/openid-connect/token' );
define( 'SKEEPERS_API_URL', 'https://api.skeepers.io/purchase-event/websites/' . SKEEPERS_WEBSITE_ID . '/purchase_events/bulk_sync_insert' );

add_action( 'woocommerce_order_status_completed', 'skeepers_send_purchase_event', 10, 1 );

function skeepers_get_access_token() {
    $cached_token = get_transient( 'skeepers_access_token' );
    if ( $cached_token ) {
        return $cached_token;
    }

    $response = wp_remote_post( SKEEPERS_AUTH_URL, array(
        'headers' => array(
            'Authorization' => 'Basic ' . base64_encode( SKEEPERS_CLIENT_ID . ':' . SKEEPERS_CLIENT_SECRET ),
            'Content-Type'  => 'application/x-www-form-urlencoded',
        ),
        'body'    => array(
            'grant_type' => 'client_credentials',
            'scope'      => 'openid',
        ),
        'timeout' => 15,
    ) );

    if ( is_wp_error( $response ) ) {
        error_log( 'Skeepers - Erreur auth : ' . $response->get_error_message() );
        return false;
    }

    $body = json_decode( wp_remote_retrieve_body( $response ), true );

    if ( empty( $body['access_token'] ) ) {
        error_log( 'Skeepers - Réponse auth inattendue : ' . wp_remote_retrieve_body( $response ) );
        return false;
    }

    $expires_in = isset( $body['expires_in'] ) ? intval( $body['expires_in'] ) - 30 : 60;
    set_transient( 'skeepers_access_token', $body['access_token'], max( $expires_in, 30 ) );

    return $body['access_token'];
}

function skeepers_send_purchase_event( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return;
    }

    if ( $order->get_meta( '_skeepers_event_sent' ) === 'yes' ) {
        return;
    }

    $products = array();
    foreach ( $order->get_items() as $item ) {
        $product = $item->get_product();
        $products[] = array(
            'product_ref' => array(
                'reference' => (string) $item->get_product_id(),
                'sku'       => $product ? $product->get_sku() : null,
            ),
            'name'  => $item->get_name(),
            'price' => (float) $item->get_total(),
        );
    }

    $payload = array(
        array(
            'purchase_reference' => (string) $order->get_order_number(),
            'purchase_date'      => $order->get_date_created() ? $order->get_date_created()->date( 'c' ) : gmdate( 'c' ),
            'price'              => (float) $order->get_total(),
            'consumer'           => array(
                'first_name' => $order->get_billing_first_name(),
                'last_name'  => $order->get_billing_last_name(),
                'email'      => $order->get_billing_email(),
                'phone'      => $order->get_billing_phone() ?: null,
                'country'    => $order->get_billing_country() ?: null,
                'language'   => 'fr',
            ),
            'products'      => $products,
            'sales_channel' => array(
                'channel'       => 'online',
                'delivery_type' => 'home_delivery',
                'website_id'    => SKEEPERS_WEBSITE_ID,
            ),
        ),
    );

    $token = skeepers_get_access_token();
    if ( ! $token ) {
        error_log( 'Skeepers - Impossible d\'envoyer la commande #' . $order_id . ' : pas de token.' );
        return;
    }

    $response = wp_remote_post( SKEEPERS_API_URL, array(
        'headers' => array(
            'Authorization' => 'Bearer ' . $token,
            'Content-Type'  => 'application/json',
        ),
        'body'    => wp_json_encode( $payload ),
        'timeout' => 15,
    ) );

    if ( is_wp_error( $response ) ) {
        error_log( 'Skeepers - Erreur envoi commande #' . $order_id . ' : ' . $response->get_error_message() );
        return;
    }

    $status_code = wp_remote_retrieve_response_code( $response );

    if ( $status_code === 201 ) {
        $order->update_meta_data( '_skeepers_event_sent', 'yes' );
        $order->save();
        error_log( 'Skeepers - Commande #' . $order_id . ' envoyée avec succès.' );
    } else {
        error_log( 'Skeepers - Réponse inattendue (' . $status_code . ') pour commande #' . $order_id . ' : ' . wp_remote_retrieve_body( $response ) );
    }
}
</code></pre>



<p class="wp-block-paragraph">Pensez à mettre ce fichier dans un dossier .zip avant de le téléverser dans les Extensions comme un plugin classique. Nommez le dossier de façon explicite "skeeper-purchase-events" par exemple.</p>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Remarque sur la sécurité des identifiants</h3>



<p class="wp-block-paragraph">Dans l'exemple ci-dessus, les identifiants sont définis directement dans le fichier du plugin pour la simplicité de la démonstration. En production, je vous recommande plutôt de les définir dans votre <code>wp-config.php</code> (fichier généralement mieux protégé et hors du dossier plugins) :</p>



<pre title="Ajout des identifiants dans wp-config.php pour plus de sécurité" class="wp-block-code"><code lang="php" class="language-php">define( 'SKEEPERS_CLIENT_ID', 'votre_client_id' );
define( 'SKEEPERS_CLIENT_SECRET', 'votre_client_secret' );
define( 'SKEEPERS_WEBSITE_ID', 'votre_website_id' );
</code></pre>



<p class="wp-block-paragraph">Et de retirer ces lignes du plugin lui-même car WordPress les rendra de fait disponibles globalement.</p>



<h2 class="wp-block-heading">Étape 5 : Tester et déboguer</h2>



<p class="wp-block-paragraph">Avant de considérer l'intégration comme opérationnelle, activez les logs WordPress dans <code>wp-config.php</code> :</p>



<pre title="Activation du mode debug de WordPress" class="wp-block-code"><code lang="php" class="language-php">define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
</code></pre>



<p class="wp-block-paragraph">Passez ensuite une commande de test, marquez-la comme "Terminée" (ou déclenchez le hook que vous avez choisi), puis surveillez <code>wp-content/debug.log</code>.</p>



<p class="wp-block-paragraph">Pour ce faire, passez par FTP (FileZilla par exemple) et ouvrez le fichier situé wp-content/debug.log</p>



<p class="wp-block-paragraph">Un envoi réussi renvoie un statut HTTP <code>201</code> avec le détail de l'événement créé côté Skeepers.</p>



<p class="wp-block-paragraph">Dans votre back-office Avis Vérifiés, vous devriez voir également votre commande de test s'afficher dans <strong>Collecte des avis &gt; Suivi des demandes d'avis</strong></p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a2567a4&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a2567a4" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="129" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/tableau-commande-suivi-demande-avis-avis-verifies-1024x129.jpg" alt="Tableau de suivi des demandes d'avis dans le back-office d'Avis Vérifiés" class="wp-image-8036 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/tableau-commande-suivi-demande-avis-avis-verifies-1024x129.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/tableau-commande-suivi-demande-avis-avis-verifies-300x38.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/tableau-commande-suivi-demande-avis-avis-verifies-768x97.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/tableau-commande-suivi-demande-avis-avis-verifies.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<h2 class="wp-block-heading">Deux subtilités à connaître absolument</h2>



<p class="wp-block-paragraph">Pendant mes tests, je suis tombé sur deux comportements qui peuvent surprendre :</p>



<p class="wp-block-paragraph"><strong>1. Le plafond de "pression marketing"</strong></p>



<p class="wp-block-paragraph">Si vous testez plusieurs fois avec la même adresse e-mail, Skeepers peut retourner un statut <code>206</code> avec l'erreur <code>"error_description": "Purchase blocked by pressure marketing"</code> (visible dans les log du fichier debug.log). C'est normal : c'est une protection anti-spam qui limite la fréquence des sollicitations d'avis envoyées à un même client. Ce n'est pas une erreur d'intégration, testez avec une adresse e-mail différente pour vérifier que le flux fonctionne bien de bout en bout.</p>



<p class="wp-block-paragraph"><strong>2. Un e-mail combiné "avis marque + avis produit", ou deux e-mails séparés ?</strong></p>



<p class="wp-block-paragraph">Autre point qui n'est documenté nulle part de façon évidente : par défaut, Avis Vérifiés gère la sollicitation "avis marque" et la sollicitation "avis produit" comme <strong>deux flux indépendants</strong>, chacun avec son propre délai de déclenchement, réglable dans <em>Collecte des avis &gt; Configuration</em>, bloc "Récupération automatique des données par SFTP et par API".</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a25707f&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a25707f" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="236" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/avis-verifies-mails-avis-marque-produit-1024x236.png" alt="Réglage du délai d'envoi des mails de demande d'avis marque et demande d'avis produit dans le tableau de bord d'Avis Vérifiés" class="wp-image-8060 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/avis-verifies-mails-avis-marque-produit-1024x236.png 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/avis-verifies-mails-avis-marque-produit-300x69.png 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/avis-verifies-mails-avis-marque-produit-768x177.png 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/avis-verifies-mails-avis-marque-produit.png 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p class="wp-block-paragraph">Si ces deux délais sont différents, vos clients recevront <strong>deux e-mails distincts</strong> : un pour l'avis marque, un pour l'avis produit. Pour obtenir un <strong>seul email combiné</strong> regroupant les deux demandes (ce qui est généralement préférable pour l'expérience client), il suffit de renseigner <strong>le même nombre de jours</strong> sur les deux réglages :</p>



<ul class="wp-block-list">
<li>Envoyer la demande d'avis marque <strong>X</strong> jour(s) après réception des données</li>



<li>Envoyer la demande d'avis produit <strong>X</strong> jour(s) après réception des données</li>
</ul>



<h2 class="wp-block-heading">Et au sujet de l'échéance ?</h2>



<p class="wp-block-paragraph">Le <strong>22 novembre</strong>, c'est dans peu de temps, et la migration touche potentiellement des milliers de boutiques WooCommerce qui utilisaient encore le <a href="https://fr.wordpress.org/plugins/netreviews/">connecteur Net Reviews</a>. Si vous n'êtes pas à l'aise avec le code ou si vous manquez de temps, je peux m'occuper de cette migration pour vous, de la configuration de vos identifiants API jusqu'aux tests en conditions réelles.</p>



<p class="wp-block-paragraph"><strong>N'attendez pas la dernière minute</strong> : passé le 22 novembre, Skeepers ne garantit plus le bon fonctionnement du connecteur actuel, ce qui veut dire une interruption possible de la collecte d'avis, sans certitude de pouvoir intervenir dans l'urgence.</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column px-4 pb-5 has-background is-layout-flow wp-block-column-is-layout-flow" style="background-color:#f2f2f2">
<h3 class="wp-block-heading has-text-align-center" id="h-besoin-d-accompagnement-pour-parametrer-votre-site-woocommerce">Besoin d'aide pour mettre en place l'API Skeepers ?</h3>



<p class="has-text-align-center wp-block-paragraph">Contactez-moi pour un audit rapide de votre situation et un devis pour l'intégration de la nouvelle API Skeepers à votre site WooCommerce.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button btn bleu btn-block"><a class="wp-block-button__link wp-element-button" href="https://thibautsoufflet.fr/contact/">Demander un devis</a></div>
</div>
</div>
</div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/migrer-woocommerce-api-avis-verifies-net-reviews/">Fin du connecteur Net Reviews : migrer WooCommerce vers l&rsquo;API Purchase Events d&rsquo;Avis Vérifiés (Skeepers)</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/migrer-woocommerce-api-avis-verifies-net-reviews/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Score « Navigation agentique » de Lighthouse : ce qu&#8217;il mesure et comment l&#8217;améliorer sur WordPress/WooCommerce</title>
		<link>https://thibautsoufflet.fr/blog/navigation-agentique-lighthouse-wordpress-woocommerce/</link>
					<comments>https://thibautsoufflet.fr/blog/navigation-agentique-lighthouse-wordpress-woocommerce/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Fri, 03 Jul 2026 06:30:00 +0000</pubDate>
				<category><![CDATA[GEO]]></category>
		<category><![CDATA[WooCommerce]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7981</guid>

					<description><![CDATA[<p>Depuis début mai 2026, un nouvel encart est apparu dans les rapports Lighthouse : Agentic Browsing, traduit en français par « Navigation agentique ». Pas de note sur 100, pas de couleur verte ou rouge familière. Juste une fraction : « 2 audits réussis sur 4 ». De quoi dérouter la première fois qu'on le [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/navigation-agentique-lighthouse-wordpress-woocommerce/">Score « Navigation agentique » de Lighthouse : ce qu&rsquo;il mesure et comment l&rsquo;améliorer sur WordPress/WooCommerce</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Depuis début mai 2026, un nouvel encart est apparu dans les rapports Lighthouse : <strong>Agentic Browsing</strong>, traduit en français par <strong>« Navigation agentique »</strong>. Pas de note sur 100, pas de couleur verte ou rouge familière. Juste une fraction : « 2 audits réussis sur 4 ». De quoi dérouter la première fois qu'on le voit.</p>



<p class="wp-block-paragraph">Cet article explique concrètement ce que mesure ce score. D'où il vient, où Google l'emmène, et surtout quelles règles appliquer sur un site WordPress ou WooCommerce. L'objectif : l'améliorer sans perdre de temps sur ce qui ne compte pas encore.</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">1. Que mesure concrètement le score « Navigation agentique » ?</h2>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a260b83&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a260b83" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" width="1024" height="498" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/pagespeed-insights-audit-navigation-agentique-1024x498.jpg" alt="Audit de performance avec PageSpeed Insights qui affiche un score de navigation agentique" class="wp-image-7987 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/pagespeed-insights-audit-navigation-agentique-1024x498.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/pagespeed-insights-audit-navigation-agentique-300x146.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/pagespeed-insights-audit-navigation-agentique-768x374.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/pagespeed-insights-audit-navigation-agentique.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Google PageSpeed affiche maintenant un score de "Navigation agentique"</figcaption></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">Le score ne juge pas votre site pour un humain ou pour un moteur de recherche classique. Il le juge du point de vue d'un <strong>agent IA autonome</strong>. Un assistant capable de naviguer, comprendre et agir à la place de l'utilisateur.</p>



<p class="wp-block-paragraph">Les catégories historiques de Lighthouse (Performance, Accessibilité, Bonnes pratiques, SEO) donnent une moyenne pondérée sur 100. Agentic Browsing fonctionne différemment. Chaque audit est <strong>binaire</strong> : réussi ou échoué, sans demi-mesure. Le score global est une fraction, du type « 3 audits sur 4 ». Google l'assume : les standards du web agentique bougent encore trop pour prétendre à une notation fiable.</p>



<p class="wp-block-paragraph">Quatre zones sont évaluées :</p>



<ol class="wp-block-list">
<li><strong>L'arbre d'accessibilité (accessibility tree)</strong> — la carte structurée que les navigateurs construisent pour décrire chaque élément cliquable d'une page. Les agents IA s'appuient dessus en priorité. L'audit vérifie que chaque bouton, lien ou champ a un nom explicite. Il vérifie aussi la cohérence de la hiérarchie de rôles.</li>



<li><strong>La stabilité de la mise en page (CLS)</strong> — le même Cumulative Layout Shift que vous suivez déjà pour les Core Web Vitals. Une image sans dimension ou une bannière tardive peut faire cliquer un agent au mauvais endroit.</li>



<li><strong>La présence d'un fichier llms.txt</strong> — la même brique dont on parlait dans <a href="https://thibautsoufflet.fr/blog/enjeux-llms-txt-strategie-geo/">notre article dédié au llms.txt et à la stratégie GEO</a>.</li>



<li><strong>L'intégration WebMCP</strong> — un protocole encore très récent. Il permet à un site de déclarer des « outils » (rechercher, ajouter au panier, réserver) qu'un agent peut appeler directement. Plus besoin de deviner à partir de captures d'écran.</li>
</ol>



<h2 class="wp-block-heading">2. D'où vient cet audit ?</h2>



<p class="wp-block-paragraph">L'audit Agentic Browsing a été ajouté dans <strong>Lighthouse 13.3</strong>, publié le <strong>7 mai 2026</strong>. Il fait désormais partie de la configuration par défaut. Concrètement, il apparaît automatiquement dans tout rapport Lighthouse. Que ce soit depuis Chrome DevTools, la CLI, ou tout outil qui s'appuie sur Lighthouse en coulisses (PageSpeed Insights, avec un léger décalage de disponibilité).</p>



<p class="wp-block-paragraph">Google le classe encore comme <strong>« expérimental »</strong>. Ce n'est pas un standard figé, mais une direction. Les audits précis peuvent évoluer dans les mois qui viennent.</p>



<p class="wp-block-paragraph">Cet audit ne sort pas de nulle part. Il s'inscrit dans une série de mouvements de Google amorcés depuis fin 2025 :</p>



<ul class="wp-block-list">
<li>Un rapport de performance IA dans <strong>Google Merchant Center</strong>, pour les sites e-commerce.</li>



<li>Un canal dédié « <strong>AI Assistant</strong> » dans Google Analytics 4. Il distingue le trafic amené par des agents IA.</li>



<li>Une identité de crawler spécifique, <strong>Google-Agent</strong>, ajoutée à la documentation officielle en mars 2026.</li>



<li>L'<strong>Universal Commerce Protocol (UCP)</strong>. Un standard qui permet à des agents IA de finaliser un achat sans quitter l'interface de Google.</li>
</ul>



<p class="wp-block-paragraph">Ce faisceau d'annonces dessine une intention claire. Préparer un web où les visites ne viennent plus seulement d'humains ou de robots d'indexation, mais aussi d'agents qui agissent pour le compte d'un utilisateur.</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-background wp-block-paragraph" style="background-color:#e6f1fb"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d9.png" alt="📙" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Lire : <a href="https://developer.chrome.com/docs/lighthouse/agentic-browsing/scoring?hl=fr">Doc officielle de Google sur son score de navigation agentique Lighthouse</a></p>



<h2 class="wp-block-heading">3. Vers quoi cela évolue-t-il ?</h2>



<p class="wp-block-paragraph">Trois tendances se dégagent pour la suite.</p>



<p class="wp-block-paragraph"><strong>Le passage en CI/CD.</strong> Lighthouse s'intègre déjà dans de nombreux pipelines d'intégration continue. Une fois la catégorie stabilisée, elle deviendra probablement une exigence technique suivie en continu. Un peu comme les Core Web Vitals depuis 2020.</p>



<p class="wp-block-paragraph"><strong>Des signaux contradictoires côté Google lui-même.</strong> John Mueller, porte-parole historique de Google Search, a publiquement comparé le llms.txt au tristement célèbre attribut meta keywords des années 2000. Un fichier que Google Search n'utilise pas pour le classement. Pourtant Lighthouse continue de l'auditer. Ce paradoxe illustre une réalité utile à retenir : l'audit vise la <strong>lisibilité pour les agents IA en général</strong> (ChatGPT, Claude, Gemini, Perplexity). Pas uniquement pour les propres systèmes de Google.</p>



<p class="wp-block-paragraph"><strong>Une maturation progressive de WebMCP.</strong> Ce protocole reste en aperçu précoce, limité à Chrome. Son adoption reste encore marginale côté agents. Mais WordPress a déjà bougé : la version <strong>7.0</strong>, sortie le <strong>20 mai 2026</strong>, embarque nativement une <strong>Abilities API</strong> en JavaScript. Elle pose les bases pour que les plugins déclarent des capacités (<code>create_order</code>, <code>list_products</code>...). Ces capacités deviennent consommables par des agents, via WebMCP ou en REST.</p>



<h2 class="wp-block-heading">4. Comment lire ce score sans paniquer</h2>



<p class="wp-block-paragraph">Le point le plus important à comprendre : <strong>ce n'est pas un facteur de classement confirmé</strong>. Google ne l'a jamais présenté comme tel. C'est un signal de préparation, pas un levier SEO direct.</p>



<p class="wp-block-paragraph">Trois des quatre audits recoupent des chantiers que vous devriez déjà mener pour d'autres raisons. L'accessibilité, pour les technologies d'assistance. La stabilité visuelle, pour l'expérience utilisateur et les Core Web Vitals. La clarté du HTML, pour le référencement classique. Optimiser pour les humains profite donc presque toujours aux agents IA par la même occasion.</p>



<p class="wp-block-paragraph">Seul WebMCP est réellement tourné vers les agents et rien d'autre. C'est aussi le plus jeune et le moins urgent des quatre.</p>



<h2 class="wp-block-heading">5. Les règles fondamentales à respecter sur WordPress / WooCommerce</h2>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a261ae1&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a261ae1" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" width="1024" height="529" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/quatre-zones-agentic-browsing-1024x529.jpg" alt="Tableau de priorisation en 4 étapes des efforts à mener sur un site internet afin d'améliorer sa visibilité auprès des agents IA" class="wp-image-7989 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/quatre-zones-agentic-browsing-1024x529.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/quatre-zones-agentic-browsing-300x155.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/quatre-zones-agentic-browsing-768x397.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/quatre-zones-agentic-browsing.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Matrice « effort / urgence » classant les 4 priorités (accessibilité, CLS, llms.txt, WebMCP)</figcaption></figure>



<h3 class="wp-block-heading">Priorité 1 — Nettoyer l'arbre d'accessibilité</h3>



<p class="wp-block-paragraph">C'est le chantier le plus rentable. Il sert à la fois les humains et les agents.</p>



<ul class="wp-block-list">
<li>Donnez un <strong>nom explicite</strong> à chaque bouton et champ de formulaire. Sur WooCommerce, vérifiez particulièrement le tunnel de commande. Bouton d'ajout au panier, sélecteurs de variantes, champs d'adresse.</li>



<li>Utilisez du <strong>HTML sémantique</strong> (<code>&lt;nav&gt;</code>, <code>&lt;main&gt;</code>, <code>&lt;button&gt;</code>) plutôt que des <code>&lt;div&gt;</code> cliquables en JavaScript. Ces derniers sont plus fragiles à interpréter pour une machine.</li>



<li>Passez un audit d'accessibilité classique (Lighthouse, WAVE, ou un plugin dédié). Corrigez les alertes de rôles ARIA mal formés.</li>
</ul>



<h3 class="wp-block-heading">Priorité 2 — Traquer les décalages de mise en page (CLS)</h3>



<p class="wp-block-paragraph">Rien de nouveau si vous suivez déjà vos Core Web Vitals :</p>



<ul class="wp-block-list">
<li>Réservez toujours une largeur et une hauteur à vos images de produits.</li>



<li>Évitez les bannières promotionnelles ou pop-ups qui s'injectent après le chargement initial.</li>



<li>Testez en particulier vos pages produit et votre tunnel de commande WooCommerce. Ce sont les plus sensibles à ce type d'incident.</li>
</ul>



<h3 class="wp-block-heading">Priorité 3 — Publier un llms.txt propre</h3>



<p class="wp-block-paragraph">Coût de mise en œuvre très faible, comme détaillé dans notre article sur le sujet. Sur WooCommerce, veillez à exclure les produits masqués ou en rupture. Gardez aussi le fichier synchronisé avec votre catalogue.</p>



<h3 class="wp-block-heading">Priorité 4 — Garder un œil sur WebMCP, sans se précipiter</h3>



<p class="wp-block-paragraph">Pour la majorité des boutiques WooCommerce, ce n'est pas encore urgent. Si vous voulez explorer le sujet :</p>



<ul class="wp-block-list">
<li>WooCommerce propose déjà une intégration MCP native, activable via le flag <code>mcp_integration</code>.</li>



<li>Plusieurs extensions WordPress commencent à exposer des outils WebMCP prêts à l'emploi. Recherche produit, panier, application de codes promo.</li>



<li>Mieux vaut prototyper sur un seul parcours à forte valeur (recherche ou ajout au panier). Évitez d'essayer de tout instrumenter d'un coup.</li>
</ul>



<h3 class="wp-block-heading">Comment lancer l'audit vous-même</h3>



<p class="wp-block-paragraph">Ouvrez Chrome DevTools, onglet Lighthouse, lancez une analyse. La carte « Navigation agentique » apparaît en tête de rapport. Une version récente de Chrome est nécessaire (150 ou plus pour un affichage complet). L'audit WebMCP, lui, nécessite une inscription à l'origin trial pour remonter un résultat exploitable. Sans ce jeton, il restera simplement neutre, même si votre implémentation est correcte.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a262cc5&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a262cc5" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" width="1024" height="491" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/audit-lighthouse-chrome-devtools-1024x491.jpg" alt="Lancement d'un audit Lighthouse avec la console DevTools de Chrome" class="wp-image-7985 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/audit-lighthouse-chrome-devtools-1024x491.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/audit-lighthouse-chrome-devtools-300x144.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/audit-lighthouse-chrome-devtools-768x368.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/audit-lighthouse-chrome-devtools.jpg 1230w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Lancement d'un audit Lighthouse avec la console DevTools de Chrome (touche F12)</figcaption></figure>



<h2 class="wp-block-heading">6. Ce qu'il faut retenir</h2>



<p class="wp-block-paragraph">Le score « Navigation agentique » n'est pas un nouvel algorithme de classement à courtiser à tout prix. C'est une checklist officielle, encore expérimentale. Elle rend visible un angle mort : la plupart des sites ont été construits pour des yeux humains et des robots d'indexation. Pas pour des agents qui doivent cliquer, remplir et acheter à votre place.</p>



<p class="wp-block-paragraph">Sur WordPress et WooCommerce, la bonne stratégie reste raisonnable. Corrigez l'accessibilité et la stabilité visuelle parce qu'elles comptent de toute façon. Ajoutez un llms.txt parce que ça ne coûte rien. Et observez WebMCP sans vous précipiter sur une implémentation que la spécification peut encore faire évoluer.</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column px-4 pb-5 has-background is-layout-flow wp-block-column-is-layout-flow" style="background-color:#f2f2f2">
<h3 class="wp-block-heading has-text-align-center" id="h-besoin-d-accompagnement-pour-parametrer-votre-site-woocommerce">Besoin d'un pro pour optimiser votre site WordPress ou WooCommerce ?</h3>



<p class="has-text-align-center wp-block-paragraph">Recevez <strong>gratuitement un devis personnalisé</strong>.<br>Contactez-moi pour en discuter ensemble !</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button btn bleu btn-block"><a class="wp-block-button__link wp-element-button" href="https://thibautsoufflet.fr/contact/">Demander un devis</a></div>
</div>
</div>
</div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/navigation-agentique-lighthouse-wordpress-woocommerce/">Score « Navigation agentique » de Lighthouse : ce qu&rsquo;il mesure et comment l&rsquo;améliorer sur WordPress/WooCommerce</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/navigation-agentique-lighthouse-wordpress-woocommerce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fichier llms.txt : quels enjeux pour votre stratégie GEO aujourd&#8217;hui et demain ?</title>
		<link>https://thibautsoufflet.fr/blog/llms-txt-strategie-geo/</link>
					<comments>https://thibautsoufflet.fr/blog/llms-txt-strategie-geo/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Wed, 01 Jul 2026 11:17:21 +0000</pubDate>
				<category><![CDATA[GEO]]></category>
		<category><![CDATA[WooCommerce]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7968</guid>

					<description><![CDATA[<p>Après le robots.txt et le sitemap.xml, un nouveau fichier s'est invité à la racine des sites web depuis fin 2024 : llms.txt. ChatGPT, Claude, Perplexity ou Gemini sont devenus de nouveaux points d'entrée du web. Ce fichier est devenu l'un des symboles de ce qu'on appelle désormais le GEO (Generative Engine Optimization) : l'art d'être [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/llms-txt-strategie-geo/">Fichier llms.txt : quels enjeux pour votre stratégie GEO aujourd&rsquo;hui et demain ?</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Après le robots.txt et le sitemap.xml, un nouveau fichier s'est invité à la racine des sites web depuis fin 2024 : <strong>llms.txt</strong>. ChatGPT, Claude, Perplexity ou Gemini sont devenus de nouveaux points d'entrée du web. Ce fichier est devenu l'un des symboles de ce qu'on appelle désormais le <strong>GEO (Generative Engine Optimization)</strong> : l'art d'être compris, cité et recommandé par les intelligences artificielles génératives.</p>



<p class="wp-block-paragraph">Faut-il s'en préoccuper sérieusement en 2026 ? Est-ce un gadget ou une véritable brique d'infrastructure pour l'avenir ? Et surtout, qu'est-ce que cela change concrètement pour un site e-commerce sous WordPress et WooCommerce ? C'est ce que nous allons voir.</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">1. Qu'est-ce que le llms.txt, exactement ?</h2>



<p class="wp-block-paragraph">Le llms.txt est un fichier texte au format Markdown. Il a été proposé en septembre 2024 par Jeremy Howard, cofondateur d'Answer.AI, et se place à la racine du site (<code>https://votresite.com/llms.txt</code>). Son objectif : offrir aux modèles de langage une <strong>carte condensée et lisible</strong> du contenu le plus important d'un site — pages clés, documentation, FAQ, catégories de produits. Les modèles n'ont ainsi plus à se battre avec le menu de navigation, les bannières de cookies, le JavaScript ou le bruit visuel d'une page HTML classique.</p>



<p class="wp-block-paragraph">Il ne faut pas le confondre avec :</p>



<ul class="wp-block-list">
<li><strong>robots.txt</strong> : qui autorise ou bloque l'accès des robots à certaines zones du site (règles <code>Allow</code> / <code>Disallow</code>). Le llms.txt, lui, ne bloque rien : c'est une liste de lecture recommandée, pas un système de permissions.</li>



<li><strong>sitemap.xml</strong> : qui liste exhaustivement toutes les URL pour faciliter l'indexation classique. Le llms.txt, au contraire, est volontairement <strong>sélectif et hiérarchisé</strong> : il met en avant les pages qui comptent vraiment.</li>
</ul>



<p class="wp-block-paragraph">À cela s'ajoutent deux variantes que l'on croise de plus en plus :</p>



<ul class="wp-block-list">
<li><strong>llms-full.txt</strong> : une version enrichie contenant le texte intégral des pages principales, pour donner un contexte plus profond aux modèles.</li>



<li>Les <strong>« pages miroirs » en Markdown</strong> (<code>.md</code> accessible en ajoutant l'extension à l'URL, ex. <code>/blog/mon-article.html.md</code>), une pratique encouragée par la spécification d'origine et déjà adoptée par plusieurs générateurs de documentation.</li>
</ul>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a269fdb&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a269fdb" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" width="1024" height="546" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/comparatif-robots-sitemap-llms-1024x546.jpg" alt="Comparatif des rôles des fichiers robots.txt, sitemap.xml et llms.txt pour le SEO et le GEO" class="wp-image-7976 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/comparatif-robots-sitemap-llms-1024x546.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/comparatif-robots-sitemap-llms-300x160.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/comparatif-robots-sitemap-llms-768x410.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/comparatif-robots-sitemap-llms.jpg 1100w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Comparatif des rôles des fichiers robots.txt, sitemap.xml et llms.txt</figcaption></figure>



<h2 class="wp-block-heading">2. Pourquoi ce fichier existe : du SEO au GEO</h2>



<p class="wp-block-paragraph">Le SEO traditionnel optimise la visibilité dans les pages de résultats Google. Le GEO optimise la probabilité d'être <strong>cité comme source</strong> dans une réponse générée par une IA — ChatGPT Search, AI Overviews de Google, Perplexity ou Claude. Plusieurs études récentes montrent que le recouvrement entre les liens les mieux classés sur Google et les sources citées par les IA s'est nettement réduit ces derniers mois. Preuve que ces systèmes développent leurs propres critères de sélection des sources.</p>



<p class="wp-block-paragraph">Le llms.txt s'inscrit dans cette logique : il ne remplace pas le SEO, il vient <strong>compléter</strong> un socle déjà solide — <a href="https://thibautsoufflet.fr/blog/optimiser-articles-blog-seo/">un contenu déjà optimisé pour le SEO</a>, une structure claire, des données structurées Schema.org, une autorité de domaine. Le papier fondateur <em>« GEO: Generative Engine Optimization »</em> (Aggarwal et al., KDD 2024) fait référence sur le sujet. Il confirme que les pratiques de contenu crédibles pèsent le plus dans la citabilité par les IA : sources citées, chiffres précis, formulations affirmatives. Bien plus que les astuces techniques isolées.</p>



<h2 class="wp-block-heading">3. Les enjeux aujourd'hui, en 2026</h2>



<p class="wp-block-paragraph"><strong>Une adoption réelle mais un impact encore incertain.</strong> De grands noms (Anthropic, Cloudflare, Stripe, Vercel) publient déjà leur propre llms.txt. Google a même intégré sa détection dans l'audit « Agentic Browsing » de Lighthouse. Des outils comme Cursor ou Claude Code s'appuient dessus au quotidien. Mais l'effet direct sur le taux de citation par les moteurs IA reste débattu. Il varie fortement d'un moteur à l'autre. Ce n'est pas une garantie de résultat : c'est une <strong>brique d'infrastructure low-cost</strong> qui prépare le terrain.</p>



<p class="wp-block-paragraph"><strong>Un signal officiel prudent.</strong> Google a rappelé publiquement mi-2026 que le GEO et l'AEO ne sont pas des leviers de classement au sens classique du terme. Un rappel à mettre en perspective avec <a href="https://thibautsoufflet.fr/blog/fin-resultats-enrichis-faq-google-2026/">les résultats enrichis FAQ de Google, désormais éteints</a>. Google reprend en effet régulièrement la main sur ce type de fonctionnalités. Cela invite à garder les pieds sur terre : le llms.txt est la cerise sur le gâteau, pas le gâteau lui-même. Le vrai socle reste le SEO technique. Contenu accessible, non bloqué par des CDN comme Cloudflare, rendu côté serveur, hiérarchie de titres claire.</p>



<p class="wp-block-paragraph"><strong>L'essor de l'« agentique ».</strong> C'est sans doute l'enjeu le plus structurant pour la suite. Au-delà de la simple citation dans une réponse, 2026 voit émerger des <strong>agents IA capables d'agir</strong>. Ils peuvent comparer, réserver ou acheter pour le compte de l'utilisateur. Des standards complémentaires apparaissent en parallèle : agents.md pour les instructions aux agents, protocoles de commerce comme UCP, ACP, AP2 ou MCP. Ils viennent s'articuler autour du llms.txt comme point d'entrée.</p>



<p class="wp-block-paragraph"><strong>Une piste de monétisation naissante.</strong> Cloudflare et d'autres acteurs ont introduit des systèmes de micro-paiement pour robots, le « pay-per-crawl ». Certains anticipent que le llms.txt pourrait, à terme, intégrer des métadonnées de type « paiement requis ». De quoi monétiser l'accès aux données à forte valeur.</p>



<p class="wp-block-paragraph"><strong>Ce que montrent les chiffres.</strong> Une analyse portant sur plusieurs millions de citations IA (ChatGPT, Gemini, Perplexity) a établi un fait marquant. La grande majorité des sources citées restent des contenus maîtrisés ou influencés par la marque elle-même. Les sites propriétaires arrivent en tête, loin devant les avis ou la presse non contrôlée. Autrement dit : la meilleure stratégie GEO reste de posséder et de structurer soi-même l'information que l'on veut voir citée. Le llms.txt est un outil naturel pour cela.</p>



<h2 class="wp-block-heading">4. Et pour un site e-commerce ? Les enjeux spécifiques</h2>



<p class="wp-block-paragraph">Sur un site vitrine ou éditorial, le llms.txt guide l'IA vers des articles et des pages informatives. Sur un site <strong>e-commerce</strong>, les enjeux changent de nature. Ce qui est en jeu, c'est la <strong>fiabilité des données transactionnelles</strong> : prix, stock, conditions de retour, garanties.</p>



<h3 class="wp-block-heading">Le risque numéro un : l'hallucination commerciale</h3>



<p class="wp-block-paragraph">Sans source fiable et structurée, une IA interrogée sur un produit peut se tromper. Elle peut affirmer à tort qu'il est en stock, inventer une politique de retour, ou se tromper sur un prix. Pour une boutique, ce n'est plus un problème de référencement. C'est un risque de <strong>confiance client et de litige</strong>. L'intérêt principal du llms.txt appliqué à WooCommerce est de fournir aux modèles des faits vérifiés plutôt que des suppositions statistiques.</p>



<h3 class="wp-block-heading">La contrainte de la fenêtre de contexte</h3>



<p class="wp-block-paragraph">Les modèles de langage ont une capacité de lecture limitée à chaque requête. Un catalogue de plusieurs milliers de références ne peut pas être listé exhaustivement dans le llms.txt. Le modèle risquerait de « décrocher » avant d'atteindre les sections importantes : FAQ, politique de retour, mentions légales. La bonne pratique consiste à structurer le fichier autour de <strong>hubs de catégories</strong> et de pages de synthèse. On évite ainsi un inventaire produit par produit. Un peu comme un plan de site pensé pour un humain pressé plutôt qu'un robot exhaustif.</p>



<h3 class="wp-block-heading">Vers le commerce agentique</h3>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a26ac1e&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a26ac1e" class="wp-block-image aligncenter size-large wp-lightbox-container"><img decoding="async" width="1024" height="459" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/flux-commerce-agentique-llms-1024x459.jpg" alt="Parcours du commerce agentique par les agents IA grâce au fichier llms.txt" class="wp-image-7978 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/flux-commerce-agentique-llms-1024x459.jpg 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/flux-commerce-agentique-llms-300x135.jpg 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/flux-commerce-agentique-llms-768x344.jpg 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/flux-commerce-agentique-llms.jpg 1249w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Parcours du commerce agentique par les agents IA grâce au fichier llms.txt</figcaption></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">C'est l'évolution la plus concrète à surveiller pour 2026-2027. Des protocoles comme <strong>ACP, UCP, AP2 ou MCP</strong> commencent à changer la donne. Ils permettent à des agents IA — ceux de Google, Perplexity, ou des assistants d'achat — de consulter en direct un flux catalogue structuré. Prix, stock, SKU en quasi temps réel. Certains peuvent même négocier une transaction pour le compte de l'utilisateur. Le llms.txt devient alors un point de découverte parmi d'autres fichiers de capacité, comme <code>/.well-known/ucp</code>. Un rôle proche de celui que joue aujourd'hui robots.txt pour les moteurs classiques. Cette couche reste jeune et évolue vite ; mieux vaut la surveiller sans se précipiter sur une implémentation lourde.</p>



<h3 class="wp-block-heading">Comment le mettre en place sur WordPress / WooCommerce</h3>



<p class="wp-block-paragraph">Concrètement, sur une stack WordPress + WooCommerce, deux approches coexistent :</p>



<ol class="wp-block-list">
<li><strong>Un plugin dédié.</strong> Plusieurs extensions gratuites ou payantes génèrent et maintiennent automatiquement le llms.txt, et souvent le llms-full.txt. Elles s'appuient sur vos contenus WordPress et vos données WooCommerce : SKU, prix, stock, catégories, dimensions. Les plus abouties respectent nativement les réglages de visibilité WooCommerce (produit masqué, exclu du catalogue ou des résultats de recherche). Elles s'intègrent aussi avec Yoast SEO, Rank Math, SEOPress ou AIOSEO pour respecter vos règles <code>noindex</code>/<code>nofollow</code>. Une régénération automatique se déclenche à chaque publication ou mise à jour de produit.</li>



<li><strong>Une génération manuelle ou sur mesure</strong>, pertinente pour les catalogues plus petits ou très segmentés. On garde ainsi un contrôle éditorial fin sur ce qui est mis en avant.</li>
</ol>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a26b4ea&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a26b4ea" class="wp-block-image aligncenter size-full wp-lightbox-container"><img decoding="async" width="716" height="900" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/07/reglages-llms-yoast.jpg" alt="Réglages llms.txt grâce au plugin Yoast SEO" class="wp-image-7973 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/07/reglages-llms-yoast.jpg 716w, https://thibautsoufflet.fr/wp-content/uploads/2026/07/reglages-llms-yoast-239x300.jpg 239w" sizes="(max-width: 716px) 100vw, 716px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Exemple de paramétrage du llms.txt avec le plugin Yoast SEO</figcaption></figure>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">Dans les deux cas, quelques bonnes pratiques reviennent systématiquement :</p>



<ul class="wp-block-list">
<li><strong>Ne pas tout lister.</strong> Privilégiez vos catégories phares, vos pages guides d'achat, votre FAQ et vos pages de confiance (livraison, retours, garanties). Évitez l'export brut de 500 URL.</li>



<li><strong>Exclure les produits masqués ou en rupture</strong> pour ne pas induire l'IA en erreur.</li>



<li><strong>Garder le fichier synchronisé</strong> avec le catalogue réel — un llms.txt obsolète est pire qu'une absence de llms.txt. Cette exigence <a href="https://thibautsoufflet.fr/blog/pourquoi-comment-faire-maintenance-site-wordpress/">s'inscrit dans une logique de maintenance régulière du site</a>, au même titre que les mises à jour de WordPress.</li>



<li><strong>Ajouter une section « directives IA »</strong> précisant, par exemple, que la source doit être citée en cas de reprise du contenu.</li>



<li><strong>Suivre les visites des robots IA</strong> (GPTBot, ClaudeBot, PerplexityBot, Google-Extended…) via les logs ou un plugin de suivi dédié. Cela permet d'objectiver l'usage réel du fichier plutôt que de se fier à des impressions.</li>
</ul>



<h3 class="wp-block-heading">Exemple de structure minimale pour une boutique</h3>



<pre class="wp-block-code"><code class=""># Ma Boutique
&gt; Boutique en ligne spécialisée en jeux de société, depuis 2011.

## Catégories principales
- [Jeux d'ambiance](https://monsite.com/jeux-ambiance/) : Des jeux de société simples, rapides, délirants et parfois loufoques pour passer un moment amusant en groupe.
- [Jeux en famille](https://monsite.com/jeux-famille/) : Pour passer un agréable moment en famille, rien de tel qu’un bon jeu de société. 
- [Jeux experts](https://monsite.com/jeux-experts/) : Vous trouverez ici des jeux de société dits experts pour joueurs initiés et aguerris.

## Informations essentielles
- [Livraison et retours](https://monsite.com/livraison-retours/)
- [FAQ](https://monsite.com/faq/)
- [Mentions légales](https://monsite.com/mentions-legales/)

## Directives IA
Citez systématiquement l'URL source lors de la reprise de ces contenus.
</code></pre>



<h2 class="wp-block-heading">5. Ce qu'il faut retenir pour la suite</h2>



<p class="wp-block-paragraph">Le llms.txt n'est ni une baguette magique, ni un gadget à ignorer. C'est une pièce d'infrastructure peu coûteuse à mettre en place. Son utilité grandira probablement à mesure que les agents IA liront et agiront de plus en plus directement sur les sites — commerce agentique compris. Pour un site e-commerce, l'enjeu dépasse la seule visibilité. Il s'agit de garder la main sur la façon dont l'IA parle de vos produits, vos prix et vos conditions de vente, plutôt que de laisser un modèle deviner.</p>



<p class="wp-block-paragraph">En attendant que les usages se stabilisent, la meilleure stratégie reste la plus simple : un contenu solide, des données produit fiables et à jour, une architecture claire. Et un llms.txt qui vient renforcer tout cela, sans jamais s'y substituer.</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex">
<div class="wp-block-column px-4 pb-5 has-background is-layout-flow wp-block-column-is-layout-flow" style="background-color:#f2f2f2">
<h3 class="wp-block-heading has-text-align-center" id="h-besoin-d-accompagnement-pour-parametrer-votre-site-woocommerce">Besoin d'accompagnement pour paramétrer votre site WordPress ou WooCommerce ?</h3>



<p class="has-text-align-center wp-block-paragraph">Recevez <strong>gratuitement un devis personnalisé</strong>.<br>Contactez-moi pour en discuter ensemble !</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-container-core-buttons-is-layout-fe48e5de wp-block-buttons-is-layout-flex">
<div class="wp-block-button btn bleu btn-block"><a class="wp-block-button__link wp-element-button" href="https://thibautsoufflet.fr/contact/">Demander un devis</a></div>
</div>
</div>
</div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/llms-txt-strategie-geo/">Fichier llms.txt : quels enjeux pour votre stratégie GEO aujourd&rsquo;hui et demain ?</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/llms-txt-strategie-geo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Fin des résultats enrichis FAQ dans Google : ce qui change en mai 2026</title>
		<link>https://thibautsoufflet.fr/blog/fin-resultats-enrichis-faq-google-2026/</link>
					<comments>https://thibautsoufflet.fr/blog/fin-resultats-enrichis-faq-google-2026/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Thu, 28 May 2026 08:50:15 +0000</pubDate>
				<category><![CDATA[Actualités]]></category>
		<category><![CDATA[SEO]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7945</guid>

					<description><![CDATA[<p>C'est officiel. Depuis le 7 mai 2026, Google a éteint la lumière sur les résultats enrichis FAQ — ces fameux blocs déroulants question/réponse qui apparaissaient directement dans les pages de résultats. La documentation officielle de Google pour les développeurs a été mise à jour sans détour : le balisage FAQPage ne génère plus aucun affichage [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/fin-resultats-enrichis-faq-google-2026/">Fin des résultats enrichis FAQ dans Google : ce qui change en mai 2026</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">C'est officiel. Depuis le <strong>7 mai 2026</strong>, Google a éteint la lumière sur les résultats enrichis FAQ — ces fameux blocs déroulants question/réponse qui apparaissaient directement dans les pages de résultats. La documentation officielle de Google pour les développeurs a été mise à jour sans détour : le balisage <code>FAQPage</code> ne génère plus aucun affichage spécifique dans les SERP. Et en juin 2026, le rapport dédié disparaîtra également de la Search Console.</p>



<p class="wp-block-paragraph">Autant dire que si vous avez passé du temps à soigner votre balisage FAQ ces dernières années… il est temps de tourner la page. Voici l'essentiel en 4 points.</p>



<h2 class="wp-block-heading">C'est quoi exactement un résultat enrichi FAQ ?</h2>



<p class="wp-block-paragraph">Pour ceux qui ne baignent pas dans le code au quotidien, petite mise en contexte rapide.</p>



<p class="wp-block-paragraph">Un résultat enrichi FAQ (ou <em>FAQ rich result</em>), c'était un <strong>format d'affichage spécial dans Google</strong> : sous le titre de votre page apparaissaient des questions dépliables directement dans les résultats de recherche. Plus de surface visible, plus de clics potentiels. La Rolls du snippet.</p>



<p class="wp-block-paragraph">Pour en bénéficier, il fallait ajouter dans le code de votre page un balisage structuré appelé <strong><code>FAQPage</code></strong> (basé sur Schema.org), qui indiquait à Google : <em>"voilà mes questions, voilà mes réponses"</em>. Quand Google l'acceptait, c'était un gros avantage visuel sur la concurrence dans les SERP.</p>



<h2 class="wp-block-heading">2. Une fin annoncée depuis 2023 — mais qui devient totale en 2026</h2>



<p class="wp-block-paragraph">Ce n'est pas une surprise tombée du ciel. Le démantèlement s'est fait progressivement :</p>



<ul class="wp-block-list">
<li><strong>Août 2023</strong> : Google annonce que les FAQ rich results ne seront plus affichés que pour une poignée de sites dits "bien établis et faisant autorité" — essentiellement des sites gouvernementaux et de santé reconnus. Pour tous les autres (soit 99 % des sites), c'est déjà terminé.</li>



<li><strong>7 mai 2026</strong> : Google coupe définitivement l'affichage pour <strong>l'ensemble des sites</strong>, sans exception. La documentation officielle est mise à jour en conséquence.</li>



<li><strong>Juin 2026</strong> : le rapport FAQ dans la Search Console et le support dans l'outil de test des résultats enrichis seront retirés.</li>
</ul>



<p class="wp-block-paragraph">Le mouvement de fond, c'est simple : Google juge que ce format a été massivement détourné à des fins de visibilité artificielle, au détriment de la qualité de l'information. Le balisage FAQ était devenu un réflexe parfois mécanique, sans vraie valeur ajoutée pour l'utilisateur.</p>



<h2 class="wp-block-heading">Faut-il supprimer son balisage FAQ d'urgence ?</h2>



<p class="wp-block-paragraph"><strong>Non, pas de panique.</strong> Le code <code>FAQPage</code> qui reste sur vos pages ne pénalisera pas votre référencement. Google l'ignore simplement désormais, il ne lui donnera plus aucun affichage enrichi.</p>



<p class="wp-block-paragraph">En revanche, c'est une bonne occasion de faire le point :</p>



<ul class="wp-block-list">
<li><strong>Auditez votre balisage FAQ</strong> : utilisez la Search Console et l'outil de test des données structurées tant qu'il est encore disponible.</li>



<li><strong>Supprimez les balisages artificiels</strong> : si vous avez ajouté des FAQ dans le code sans qu'elles apparaissent réellement dans votre contenu visible, nettoyez. Cela allège votre code inutilement.</li>



<li><strong>Conservez les FAQ utiles</strong> : si vos questions/réponses apportent une vraie valeur à l'utilisateur et figurent dans le contenu visible de la page, gardez-les. Elles continuent à enrichir votre contenu, même sans affichage enrichi.</li>
</ul>



<h2 class="wp-block-heading">4. Où réinvestir l'effort consacré aux FAQ ?</h2>



<p class="wp-block-paragraph">C'est là que réside l'opportunité. Si vous passiez du temps à construire des FAQ pour optimiser votre affichage dans Google, orientez cet effort vers des leviers qui, eux, continuent à fonctionner :</p>



<ul class="wp-block-list">
<li><strong>Les autres types de données structurées</strong> : <code>HowTo</code>, <code>Article</code>, <code>BreadcrumbList</code>, <code>LocalBusiness</code>, <code>Product</code>… Ces balisages sont toujours actifs et produisent des résultats enrichis dans les SERP.</li>



<li><strong>Du contenu vraiment utile</strong> : répondre aux vraies questions de vos utilisateurs dans des articles de fond reste la meilleure stratégie SEO à long terme. Les moteurs de recherche — y compris les IA génératives — valorisent les contenus qui répondent précisément à une intention de recherche.</li>



<li><strong>La structuration de vos pages</strong> : des titres clairs (H2/H3), des réponses concises en début de section, une bonne organisation du contenu… Ce sont ces éléments qui nourrissent aujourd'hui les extraits en position zéro et les réponses dans les moteurs génératifs.</li>
</ul>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">La fin des FAQ rich results, c'est un signal fort de Google : <strong>la visibilité se mérite par la qualité, pas par des astuces de balisage</strong>. Les sites qui utilisaient ces balises comme un raccourci SEO perdent un avantage artificiel. Ceux qui ont investi dans du contenu solide et bien structuré, eux, ne perdent rien — au contraire.</p>



<p class="wp-block-paragraph">Si vous gérez un site WordPress et que vous n'avez pas encore fait le tour de vos données structurées, c'est le bon moment pour un audit SEO technique. Et si vous avez des questions sur la stratégie à adopter, <a href="https://thibautsoufflet.fr/contact/">vous savez où me trouver</a>.</p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph"><em><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>À noter :</strong> le balisage <code>FAQPage</code> restera techniquement valide selon les spécifications Schema.org. Il peut encore être utile dans un contexte de recherche vocale ou pour les IA qui indexent votre contenu. Mais pour Google Search en 2026 ? C'est une page tournée.</em></p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/fin-resultats-enrichis-faq-google-2026/">Fin des résultats enrichis FAQ dans Google : ce qui change en mai 2026</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/fin-resultats-enrichis-faq-google-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dark Patterns : quand le design vous manipule (sans que vous le sachiez)</title>
		<link>https://thibautsoufflet.fr/blog/dark-patterns-web-manipulation/</link>
					<comments>https://thibautsoufflet.fr/blog/dark-patterns-web-manipulation/#comments</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Sun, 12 Apr 2026 13:11:58 +0000</pubDate>
				<category><![CDATA[Actualités]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7900</guid>

					<description><![CDATA[<p>Vous avez déjà voulu annuler un abonnement et passé 10 minutes à chercher le bouton ? Coché sans le vouloir une assurance en réservant un billet d'avion ? Accepté des cookies parce que le bouton "Refuser" était introuvable ? Ce n'est pas un hasard. C'est du design. Dans cet article, on va décortiquer les dark [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/dark-patterns-web-manipulation/">Dark Patterns : quand le design vous manipule (sans que vous le sachiez)</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
.dp-intro-box{background:#f7f6f3;border-left:4px solid #e8593c;border-radius:0 8px 8px 0;padding:1.1rem 1.3rem;margin:1.2rem 0 1.8rem;color:#5a5a56}
.dp-pattern-card{border:1px solid rgba(0,0,0,.1);border-radius:10px;overflow:hidden;margin:1.8rem 0;box-shadow:0 1px 4px rgba(0,0,0,.07)}
.dp-pattern-header{display:flex;align-items:center;gap:.75rem;padding:.9rem 1.1rem;background:#f7f6f3;border-bottom:1px solid rgba(0,0,0,.08);font-family:sans-serif}
.dp-pattern-num{width:30px;height:30px;border-radius:50%;background:#e8593c;color:#fff;font-weight:700;font-size:.9rem;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.dp-pattern-title{font-weight:700;font-size:.97rem;font-family:sans-serif}
.dp-pattern-subtitle{font-size:.75rem;color:#8a8a84;margin-top:2px;font-family:sans-serif}
.dp-pattern-body{padding:1.1rem 1.3rem}
.dp-pattern-body p{font-size:.93rem;margin-bottom:.75rem;line-height:1.7}
.dp-mockup-wrap{background:#dbd9d2;border-radius:8px;padding:.9rem;margin:.9rem 0;display:flex;justify-content:center;align-items:center}
.dp-badge-bad{display:inline-block;background:#fcebeb;color:#a32d2d;font-family:sans-serif;font-size:10px;font-weight:700;padding:3px 8px;border-radius:20px;margin-bottom:5px}
.dp-badge-ok{display:inline-block;background:#eaf3de;color:#3b6d11;font-family:sans-serif;font-size:10px;font-weight:700;padding:3px 8px;border-radius:20px;margin-bottom:5px}
.dp-annotation{display:flex;align-items:center;gap:5px;font-family:sans-serif;font-size:11px;color:#a32d2d;font-weight:600;margin:3px 0 7px}
.dp-annotation::before{content:"&#x261d;";font-size:13px}
.dp-compare-row{display:grid;grid-template-columns:1fr 1fr;gap:.7rem;margin:.9rem 0}
.dp-compare-col{border-radius:8px;padding:.85rem;font-family:sans-serif;font-size:.82rem;line-height:1.5}
.dp-compare-col.bad{background:#fcebeb;border:1px solid #f09595}
.dp-compare-col.good{background:#eaf3de;border:1px solid #c0dd97}
.dp-compare-col .dp-col-label{font-weight:700;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;margin-bottom:.35rem}
.dp-compare-col.bad .dp-col-label{color:#a32d2d}
.dp-compare-col.good .dp-col-label{color:#3b6d11}
.dp-compare-col p{margin:0;color:#5a5a56}
.dp-site-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:.9rem;margin:1.1rem 0}
.dp-site-card{border:1px solid rgba(0,0,0,.1);border-radius:10px;padding:.95rem;font-family:sans-serif;font-size:.82rem;background:#fff}
.dp-site-card .dp-site-name{font-weight:700;font-size:.95rem;margin-bottom:3px}
.dp-site-card .dp-site-pattern{display:inline-block;font-size:.72rem;background:#faeeda;color:#854f0b;padding:2px 8px;border-radius:20px;font-weight:600;margin-bottom:5px}
.dp-site-card p{color:#5a5a56;margin:0;line-height:1.5}
.dp-law-box{background:#fcebeb;border-left:4px solid #e24b4a;border-radius:0 8px 8px 0;padding:1.1rem 1.3rem;margin:1.2rem 0;font-family:sans-serif;font-size:.88rem}
.dp-law-box .dp-law-title{font-weight:700;font-size:.95rem;color:#a32d2d;margin-bottom:.45rem}
.dp-law-box ul{margin:0;padding-left:1.2rem;color:#5a5a56}
.dp-law-box li{margin-bottom:.28rem}
.dp-tips-box{background:#eaf3de;border-left:4px solid #639922;border-radius:0 8px 8px 0;padding:1.1rem 1.3rem;margin:1.2rem 0;font-family:sans-serif;font-size:.88rem}
.dp-tips-box .dp-tips-title{font-weight:700;font-size:.95rem;color:#3b6d11;margin-bottom:.45rem}
.dp-tips-box ul{margin:0;padding-left:1.2rem;color:#5a5a56}
.dp-tips-box li{margin-bottom:.28rem}

/* Mockup components */
.dp-cookie-mockup{background:#fff;border:1px solid #ddd;border-radius:8px;width:100%;max-width:500px;padding:1.1rem;font-family:sans-serif;font-size:12px;box-shadow:0 4px 18px rgba(0,0,0,.13)}
.dp-cookie-title{font-weight:700;font-size:13px;margin-bottom:5px}
.dp-cookie-text{color:#555;margin-bottom:12px;line-height:1.5}
.dp-cookie-actions{display:flex;gap:7px;flex-wrap:wrap;align-items:center}
.dp-btn-accept{background:#0057b7;color:#fff;border:none;padding:8px 18px;border-radius:4px;font-size:12px;font-weight:700;cursor:pointer;font-family:sans-serif}
.dp-btn-refuse{background:none;color:#aaa;border:none;padding:8px 6px;font-size:10px;cursor:pointer;font-family:sans-serif;text-decoration:underline}
.dp-btn-custom{background:none;color:#888;border:1px solid #ccc;padding:7px 12px;border-radius:4px;font-size:10px;cursor:pointer;font-family:sans-serif}
.dp-cookie-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:.9rem 0;align-items:start}
.dp-urgency-mockup{background:#fff;border:1px solid #ddd;border-radius:8px;width:100%;max-width:360px;padding:1.1rem;font-family:sans-serif;font-size:12px;box-shadow:0 4px 18px rgba(0,0,0,.13)}
.dp-hotel-name{font-weight:700;font-size:13px;margin-bottom:3px}
.dp-hotel-price{font-size:19px;font-weight:700;color:#cc0000}
.dp-urgency-msg{background:#fff3cd;border-left:3px solid #f6a623;padding:6px 9px;border-radius:4px;font-size:11px;margin:7px 0;color:#7a5200}
.dp-seen-msg{color:#888;font-size:10px;margin:4px 0}
.dp-btn-book{display:block;width:100%;background:#cc0000;color:#fff;border:none;padding:9px;border-radius:4px;font-size:12px;font-weight:700;cursor:pointer;font-family:sans-serif;text-align:center;margin-top:9px}
.dp-popup-overlay{background:rgba(0,0,0,.42);border-radius:8px;padding:1.3rem;display:flex;align-items:center;justify-content:center;min-height:200px}
.dp-popup-box{background:#fff;border-radius:10px;padding:1.3rem;max-width:320px;width:100%;font-family:sans-serif;text-align:center;box-shadow:0 8px 28px rgba(0,0,0,.18)}
.dp-popup-box h4{font-size:14px;font-weight:700;margin-bottom:7px}
.dp-popup-box p{font-size:11px;color:#666;margin-bottom:12px;line-height:1.5}
.dp-btn-yes{display:block;width:100%;background:#e8593c;color:#fff;border:none;padding:9px;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;font-family:sans-serif;margin-bottom:7px}
.dp-btn-no{display:block;width:100%;background:none;color:#aaa;border:none;font-size:10px;cursor:pointer;font-family:sans-serif;font-style:italic}
.dp-cart-mockup{background:#fff;border:1px solid #ddd;border-radius:8px;width:100%;max-width:420px;padding:.95rem;font-family:sans-serif;font-size:12px;box-shadow:0 4px 18px rgba(0,0,0,.13)}
.dp-cart-title{font-weight:700;font-size:13px;margin-bottom:9px;border-bottom:1px solid #eee;padding-bottom:7px}
.dp-cart-item{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #f0f0f0;align-items:center}
.dp-cart-item.sneaky{background:#fff8e1;margin:0 -.95rem;padding:6px .95rem;position:relative}
.dp-cart-item.sneaky::before{content:"Ajouté auto.";position:absolute;top:0;right:0;font-size:9px;background:#f6a623;color:#7a5200;padding:2px 7px;border-radius:0 0 0 6px;font-weight:700}
.dp-cart-total{display:flex;justify-content:space-between;font-weight:700;font-size:14px;margin-top:9px}
.dp-roach-mockup{background:#fff;border:1px solid #ddd;border-radius:8px;width:100%;max-width:400px;font-family:sans-serif;font-size:11px;box-shadow:0 4px 18px rgba(0,0,0,.13);overflow:hidden}
.dp-roach-step{padding:.8rem 1rem;border-bottom:1px solid #eee}
.dp-roach-step:last-child{border-bottom:none}
.dp-step-header{display:flex;align-items:center;gap:7px;margin-bottom:5px}
.dp-step-num{background:#eee;color:#888;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:10px;flex-shrink:0}
.dp-step-num.active{background:#0057b7;color:#fff}
.dp-step-label{font-weight:700;font-size:12px}
.dp-step-sub{color:#888;font-size:10px}
.dp-step-btns{display:flex;gap:7px;margin-top:7px}
.dp-btn-keep{background:#0057b7;color:#fff;border:none;padding:6px 12px;border-radius:4px;font-size:11px;font-weight:700;cursor:pointer;font-family:sans-serif}
.dp-btn-cancel-sm{background:none;border:none;color:#bbb;font-size:9px;cursor:pointer;font-family:sans-serif;text-decoration:underline;align-self:center}
.dp-fc-mockup{background:#fff;border:1px solid #ddd;border-radius:8px;width:100%;max-width:380px;padding:1.1rem;font-family:sans-serif;font-size:12px;box-shadow:0 4px 18px rgba(0,0,0,.13);text-align:center}
.dp-trial-badge{display:inline-block;background:#eaf3de;color:#3b6d11;font-weight:700;font-size:10px;padding:3px 11px;border-radius:20px;margin-bottom:9px}
.dp-fc-mockup h4{font-size:15px;font-weight:700;margin-bottom:5px}
.dp-fc-sub{font-size:11px;color:#888;margin-bottom:9px}
.dp-fc-info{background:#f7f6f3;border-radius:6px;padding:9px;text-align:left;margin-bottom:11px}
.dp-fc-line{font-size:10px;color:#666;margin-bottom:2px;display:flex;align-items:center;gap:5px}
.dp-btn-start{display:block;width:100%;background:#e8593c;color:#fff;border:none;padding:10px;border-radius:6px;font-size:12px;font-weight:700;cursor:pointer;font-family:sans-serif;margin-bottom:6px}
.dp-fc-legal{font-size:9px;color:#bbb;line-height:1.4}
@media(max-width:540px){.dp-cookie-grid,.dp-compare-row{grid-template-columns:1fr}.dp-site-grid{grid-template-columns:1fr}}
</style>



<p class="wp-block-paragraph">Vous avez déjà voulu annuler un abonnement et passé 10 minutes à chercher le bouton ? Coché sans le vouloir une assurance en réservant un billet d'avion ? Accepté des cookies parce que le bouton "Refuser" était introuvable ? Ce n'est pas un hasard. C'est du design.</p>



<p class="wp-block-paragraph">Dans cet article, on va décortiquer les <strong>dark patterns</strong> : ce que c'est, comment les reconnaître, et quels sites bien connus en font usage. Avec des exemples visuels pour que ça ne passe plus jamais inaperçu.</p>



<h2 class="wp-block-heading">Qu'est-ce qu'un dark pattern ?</h2>



<p class="wp-block-paragraph">Le terme <strong>dark pattern</strong> (ou <em>deceptive design</em> en anglais) a été inventé en <strong>2010 par Harry Brignull</strong>, designer UX britannique. Sa définition est simple :</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-background wp-block-paragraph" style="background-color:#e6f1fb"><strong><mark style="background-color:#ffffff" class="has-inline-color"><em>Définition</em></mark></strong><br><br><strong>Un dark pattern est une interface utilisateur délibérément conçue pour vous faire faire quelque chose que vous n'auriez pas fait de vous-même</strong> — acheter, s'inscrire, accepter, rester abonné… en exploitant vos biais cognitifs plutôt qu'en vous informant clairement.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">En français, on parle aussi d'<strong>interface truquée</strong>, de <strong>design trompeur</strong> ou de <strong>pratique commerciale trompeuse</strong>. Ces techniques sont partout : dans les bandeaux cookies, les tunnels d'achat, les pages d'abonnement, les formulaires de désinscription...</p>



<h3 class="wp-block-heading">Pourquoi ça marche (psychologie)</h3>



<p class="wp-block-paragraph">Les dark patterns ne s'inventent pas au hasard. Ils exploitent des mécanismes psychologiques bien documentés :</p>



<ul class="wp-block-list">
<li><strong>La fatigue décisionnelle</strong> : plus le parcours est long et compliqué, moins on fait attention à ce qu'on valide.</li>



<li><strong>Le biais de confirmation</strong> : on lit ce qu'on s'attend à lire. Un bouton bleu "Continuer" ? On clique sans vraiment lire ce qu'il dit.</li>



<li><strong>La peur de manquer (FOMO)</strong> : "Plus que 2 chambres disponibles !" nous pousse à décider vite, sans réfléchir.</li>



<li><strong>L'inertie</strong> : une case déjà cochée reste cochée si personne ne la décoche. C'est plus facile de ne rien faire.</li>
</ul>



<h2 class="wp-block-heading">Les 8 types de dark patterns les plus courants</h2>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">1</div>
    <div>
      <div class="dp-pattern-title">Les bandeaux cookies truqués</div>
      <div class="dp-pattern-subtitle">Misdirection — Asymétrie visuelle</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>C'est le dark pattern que vous rencontrez <strong>plusieurs fois par jour</strong>. Légalement, "Tout accepter" et "Tout refuser" doivent être aussi faciles d'accès l'un que l'autre. En pratique ? Ce n'est presque jamais le cas.</p>
    <div class="dp-cookie-grid">
      <div>
        <div class="dp-badge-bad"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dark pattern — fréquent</div>
        <div class="dp-mockup-wrap">
          <div class="dp-cookie-mockup">
            <div class="dp-cookie-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f36a.png" alt="🍪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Votre vie privée nous importe</div>
            <div class="dp-cookie-text">Nous utilisons des cookies pour améliorer votre expérience, mesurer l'audience et vous proposer des publicités personnalisées.</div>
            <div class="dp-cookie-actions">
              <button class="dp-btn-accept">Tout accepter</button>
              <button class="dp-btn-custom">Paramétrer</button>
              <button class="dp-btn-refuse">refuser</button>
            </div>
          </div>
        </div>
        <div class="dp-annotation">Bouton "Refuser" quasi invisible, en texte minuscule</div>
      </div>
      <div>
        <div class="dp-badge-ok"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Design honnête</div>
        <div class="dp-mockup-wrap">
          <div class="dp-cookie-mockup">
            <div class="dp-cookie-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f36a.png" alt="🍪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Votre vie privée nous importe</div>
            <div class="dp-cookie-text">Nous utilisons des cookies pour améliorer votre expérience, mesurer l'audience et vous proposer des publicités personnalisées.</div>
            <div class="dp-cookie-actions">
              <button class="dp-btn-accept" style="background:#2d6a2d;">Tout accepter</button>
              <button class="dp-btn-accept" style="background:#fff;color:#333;border:1px solid #ccc;font-weight:600;">Tout refuser</button>
            </div>
          </div>
        </div>
      </div>
    </div>
    <p>La CNIL l'interdit formellement : le bouton "Refuser" doit être <strong>aussi visible et accessible</strong> que "Tout accepter". Les sanctions tombent : Google a écopé d'une amende de <strong>325 millions d'euros</strong> en septembre 2025 notamment pour ce type de pratique.</p>
  </div>
</div>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">2</div>
    <div>
      <div class="dp-pattern-title">La fausse urgence et la rareté artificielle</div>
      <div class="dp-pattern-subtitle">Scarcity — FOMO — Fake urgency</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>Des messages comme "Plus que 2 en stock !", "3 personnes regardent cet hôtel", ou "Offre expire dans 14:59"... Ces indicateurs sont souvent <strong>fabriqués de toutes pièces</strong> pour créer un sentiment d'urgence et court-circuiter votre réflexion.</p>
    <div class="dp-mockup-wrap">
      <div class="dp-urgency-mockup">
        <div class="dp-hotel-name"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3e8.png" alt="🏨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Hôtel Bellevue, Paris</div>
        <div style="color:#888;font-size:10px;margin-bottom:7px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /> · Centre-ville</div>
        <div class="dp-hotel-price">89 €<span style="font-size:11px;color:#888;font-weight:400;">/nuit</span></div>
        <div class="dp-urgency-msg"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Plus que 1 chambre disponible à ce prix !</div>
        <div class="dp-seen-msg"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f441.png" alt="👁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 14 personnes regardent cet hôtel en ce moment</div>
        <div style="background:#fff3f3;border-radius:4px;padding:6px;font-size:10px;color:#cc0000;margin-bottom:7px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/23f0.png" alt="⏰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ce tarif expire dans 11:32</div>
        <button class="dp-btn-book">Réserver maintenant</button>
      </div>
    </div>
    <div class="dp-annotation">Trois messages d'urgence empilés pour maximiser la pression psychologique</div>
    <p><strong>Booking.com</strong>, <strong>Ryanair</strong> et <strong>Amazon</strong> sont régulièrement pointés du doigt pour ce type de pratique. Ces informations ne sont pas toujours vérifiables, et le stock peut "se régénérer" miraculeusement après votre passage.</p>
  </div>
</div>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">3</div>
    <div>
      <div class="dp-pattern-title">Le confirmshaming — culpabilisation par les mots</div>
      <div class="dp-pattern-subtitle">Confirmshaming — Manipulation rhétorique</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>Il s'agit de <strong>reformuler le refus de manière culpabilisante</strong> pour que vous ayez honte de dire non. Le bouton d'acceptation est formulé positivement, le refus est formulé de manière à vous faire sentir stupide ou déraisonnable.</p>
    <div class="dp-mockup-wrap">
      <div class="dp-popup-overlay">
        <div class="dp-popup-box">
          <h4><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f48c.png" alt="💌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Nos meilleures offres exclusives</h4>
          <p>Rejoignez 250 000 abonnés et recevez chaque semaine nos bons plans, astuces et promotions en avant-première.</p>
          <button class="dp-btn-yes">Oui, je veux économiser !</button>
          <button class="dp-btn-no">Non merci, je préfère payer plein tarif</button>
        </div>
      </div>
    </div>
    <div class="dp-annotation">Le refus est formulé pour vous faire paraître déraisonnable</div>
    <div class="dp-compare-row">
      <div class="dp-compare-col bad">
        <div class="dp-col-label"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Confirmshaming</div>
        <p>"Non merci, je préfère payer plein tarif" / "Non, je n'aime pas les bons plans" / "Je préfère rester ignorant"</p>
      </div>
      <div class="dp-compare-col good">
        <div class="dp-col-label"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Formulation honnête</div>
        <p>"Non merci" / "Je ne souhaite pas m'inscrire" / "Fermer"</p>
      </div>
    </div>
  </div>
</div>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">4</div>
    <div>
      <div class="dp-pattern-title">L'ajout furtif au panier</div>
      <div class="dp-pattern-subtitle">Sneak into basket — Trick question</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>Des produits ou options <strong>s'ajoutent automatiquement</strong> à votre commande, sans que vous les ayez explicitement choisis. Vous devez les retirer activement — et souvent, vous ne les remarquez qu'à la validation finale.</p>
    <div class="dp-mockup-wrap">
      <div class="dp-cart-mockup">
        <div class="dp-cart-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d2.png" alt="🛒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Votre panier</div>
        <div class="dp-cart-item"><span>Vol Paris → Rome (aller-retour)</span><span style="font-weight:700;">149 €</span></div>
        <div class="dp-cart-item"><span>Bagage cabine</span><span style="font-weight:700;">15 €</span></div>
        <div class="dp-cart-item sneaky">
          <span><input type="checkbox" checked style="width:13px;height:13px;accent-color:#f6a623;margin-right:5px;">Assurance annulation FlexiPlus</span>
          <span style="font-weight:700;color:#cc8800;">+29 €</span>
        </div>
        <div class="dp-cart-item sneaky" style="margin-top:2px;">
          <span><input type="checkbox" checked style="width:13px;height:13px;accent-color:#f6a623;margin-right:5px;">Siège "Choix Standard"</span>
          <span style="font-weight:700;color:#cc8800;">+12 €</span>
        </div>
        <div class="dp-cart-total"><span>Total</span><span>205 €</span></div>
      </div>
    </div>
    <div class="dp-annotation">Deux options cochées par défaut — décocher demande de l'attention</div>
    <p><strong>Ryanair</strong> est l'exemple canonique : l'assurance voyage est préchoisie par défaut. Pour la refuser, il fallait historiquement sélectionner son pays de résidence dans une liste déroulante — un dark pattern particulièrement retors.</p>
  </div>
</div>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">5</div>
    <div>
      <div class="dp-pattern-title">Le "Roach Motel" — facile d'entrer, impossible de sortir</div>
      <div class="dp-pattern-subtitle">Roach Motel — Obstruction</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>S'abonner : 3 clics. Se désabonner : un vrai parcours du combattant avec écrans de confirmation, tentatives de dissuasion en cascade et bouton de résiliation délibérément caché.</p>
    <div class="dp-mockup-wrap">
      <div class="dp-roach-mockup">
        <div class="dp-roach-step">
          <div class="dp-step-header">
            <div class="dp-step-num" style="background:#27500a;color:#fff;">✓</div>
            <div class="dp-step-label">Étape 1 — Demande de résiliation</div>
          </div>
          <div class="dp-step-sub">Demande envoyée. Mais attendez...</div>
        </div>
        <div class="dp-roach-step">
          <div class="dp-step-header">
            <div class="dp-step-num active">2</div>
            <div class="dp-step-label">Vous allez perdre tous ces avantages</div>
          </div>
          <div class="dp-step-sub">Livraison offerte · Streaming · Kindle · Stockage photos illimité...</div>
          <div class="dp-step-btns">
            <button class="dp-btn-keep">Conserver mon abonnement</button>
            <button class="dp-btn-cancel-sm">Continuer la résiliation</button>
          </div>
        </div>
        <div class="dp-roach-step" style="opacity:.5;">
          <div class="dp-step-header">
            <div class="dp-step-num">3</div>
            <div class="dp-step-label">Une offre spéciale rien que pour vous</div>
          </div>
        </div>
        <div class="dp-roach-step" style="opacity:.3;">
          <div class="dp-step-header">
            <div class="dp-step-num">4</div>
            <div class="dp-step-label">Confirmation finale</div>
          </div>
        </div>
      </div>
    </div>
    <div class="dp-annotation">Amazon Prime propose jusqu'à 4 écrans de dissuasion avant la résiliation effective</div>
    <p>La Commission européenne a ouvert une enquête sur <strong>Amazon Prime</strong> précisément pour ce motif. Depuis, le processus a été simplifié en Europe — sous la pression réglementaire.</p>
  </div>
</div>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">6</div>
    <div>
      <div class="dp-pattern-title">L'essai gratuit qui devient payant</div>
      <div class="dp-pattern-subtitle">Force Continuity — Dark subscription</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>L'offre d'essai gratuite nécessite de renseigner sa carte bancaire. À la fin de la période, <strong>la facturation démarre automatiquement</strong> sans avertissement clair — ou avec un email noyé dans la masse.</p>
    <div class="dp-mockup-wrap">
      <div class="dp-fc-mockup">
        <div class="dp-trial-badge">✓ 30 jours d'essai GRATUIT</div>
        <h4>Commencez dès aujourd'hui !</h4>
        <div class="dp-fc-sub">Aucun paiement pendant 30 jours</div>
        <div class="dp-fc-info">
          <div class="dp-fc-line"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c5.png" alt="📅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Aujourd'hui : activation gratuite</div>
          <div class="dp-fc-line"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4b3.png" alt="💳" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Dans 30 jours : <strong>12,99 €/mois</strong></div>
          <div class="dp-fc-line" style="color:#bbb;font-size:9px;">Résiliation possible à tout moment*</div>
        </div>
        <button class="dp-btn-start">Démarrer mon essai gratuit</button>
        <div class="dp-fc-legal">* La résiliation doit être effectuée 48h avant la fin de la période d'essai, via votre espace client, onglet "Abonnements", sous-menu "Gérer", section "Facturation active".</div>
      </div>
    </div>
    <div class="dp-annotation">Carte débitée sans rappel, résiliation volontairement complexifiée dans les petites lignes</div>
    <p>Les services de streaming (<strong>Netflix</strong>, <strong>Disney+</strong>), les logiciels SaaS et de nombreuses applis mobiles utilisent cette mécanique. Le principe : parier sur l'oubli ou la flemme de l'utilisateur.</p>
  </div>
</div>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">7</div>
    <div>
      <div class="dp-pattern-title">Les publicités déguisées</div>
      <div class="dp-pattern-subtitle">Disguised Ads — Bait and Switch</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>Des liens sponsorisés habillés comme des résultats naturels, des "articles recommandés" qui sont en fait des publicités, des boutons "Télécharger" qui renvoient vers un autre logiciel que celui attendu...</p>
    <div class="dp-mockup-wrap">
      <div style="background:#fff;border-radius:8px;padding:.95rem;width:100%;max-width:420px;font-family:sans-serif;font-size:11px;box-shadow:0 4px 18px rgba(0,0,0,.13);">
        <div style="font-size:9px;color:#888;margin-bottom:7px;">Résultats de recherche pour "télécharger VLC"</div>
        <div style="border:1px solid #d0d9f5;border-radius:6px;padding:9px;margin-bottom:7px;background:#f0f4ff;">
          <div style="display:flex;justify-content:space-between;align-items:center;">
            <div style="color:#1a73e8;font-size:12px;font-weight:700;">Télécharger VLC Media Player — Officiel</div>
            <div style="background:#e8f0fe;color:#1a73e8;font-size:8px;padding:2px 5px;border-radius:2px;font-weight:700;white-space:nowrap;">Sponsorisé</div>
          </div>
          <div style="color:#188038;font-size:10px;">www.vlc-download-now.net</div>
          <div style="color:#555;font-size:10px;margin-top:2px;">Téléchargez VLC gratuitement en 1 clic. Version officielle 2024.</div>
        </div>
        <div style="border:1px solid #eee;border-radius:6px;padding:9px;background:#fff;">
          <div style="color:#1a73e8;font-size:12px;font-weight:700;">VLC media player – VideoLAN</div>
          <div style="color:#188038;font-size:10px;">www.videolan.org › vlc</div>
          <div style="color:#555;font-size:10px;margin-top:2px;">VLC is a free and open source cross-platform multimedia player...</div>
        </div>
        <div class="dp-annotation" style="margin-top:7px;">Le 1er résultat imite l'officiel — et peut installer des logiciels indésirables</div>
      </div>
    </div>
    <p>On retrouve aussi ce pattern sur les sites de téléchargement avec <strong>plusieurs boutons "Télécharger"</strong> dont un seul est le bon — les autres installant des adwares ou barres d'outils non désirées.</p>
  </div>
</div>



<div class="dp-pattern-card">
  <div class="dp-pattern-header">
    <div class="dp-pattern-num">8</div>
    <div>
      <div class="dp-pattern-title">Le langage à double sens et les phrases à la négation</div>
      <div class="dp-pattern-subtitle">Misdirection — Trick questions</div>
    </div>
  </div>
  <div class="dp-pattern-body">
    <p>Des phrases à la négation volontairement confuses, des cases à cocher dont le sens est inversé, ou une mise en page qui attire l'œil sur un élément pour en cacher un autre.</p>
    <div class="dp-compare-row">
      <div class="dp-compare-col bad">
        <div class="dp-col-label"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Formulation trompeuse</div>
        <p>☐ <em>"Je ne souhaite pas ne pas recevoir les offres partenaires"</em><br><br>Double négation = impossible à déchiffrer rapidement</p>
      </div>
      <div class="dp-compare-col good">
        <div class="dp-col-label"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Formulation claire</div>
        <p>☐ <em>"Je souhaite recevoir les offres de nos partenaires"</em><br><br>Simple, direct, sans ambiguïté</p>
      </div>
    </div>
    <p><strong>LinkedIn</strong> est souvent cité pour ses emails de "confirmation" au libellé ambigu : cliquer sur "Oui" entraîne parfois l'envoi d'invitations à tous vos contacts Gmail — sans que ce soit clairement annoncé.</p>
  </div>
</div>



<h2 class="wp-block-heading">Les sites bien connus qui utilisent ces techniques</h2>



<p class="wp-block-paragraph">Ces pratiques ne sont pas l'apanage de petits sites douteux. Les plus grandes plateformes mondiales y ont recours — certaines ont d'ailleurs été sanctionnées pour cela.</p>



<div class="dp-site-grid">
  <div class="dp-site-card">
    <div class="dp-site-name"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6d2.png" alt="🛒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Amazon</div>
    <div class="dp-site-pattern">Roach Motel + Urgence</div>
    <p>Résiliation de Prime en plusieurs étapes avec écrans de dissuasion. Affichage de "Plus que X en stock" et prix barrés parfois contestables.</p>
  </div>
  <div class="dp-site-card">
    <div class="dp-site-name"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3e8.png" alt="🏨" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Booking.com</div>
    <div class="dp-site-pattern">Fausse urgence</div>
    <p>"X personnes regardent", "Dernière chambre", compteur en temps réel... Des indicateurs dont la réalité est souvent invérifiable.</p>
  </div>
  <div class="dp-site-card">
    <div class="dp-site-name"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2708.png" alt="✈" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ryanair</div>
    <div class="dp-site-pattern">Sneak into basket</div>
    <p>Options pré-cochées (assurance, siège), tarif de base affiché sans bagages. Le "vrai" prix n'apparaît qu'à la fin du tunnel d'achat.</p>
  </div>
  <div class="dp-site-card">
    <div class="dp-site-name"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4bc.png" alt="💼" class="wp-smiley" style="height: 1em; max-height: 1em;" /> LinkedIn</div>
    <div class="dp-site-pattern">Misdirection + Pression</div>
    <p>Invitations massives envoyées en votre nom sans consentement clair, notifications persistantes pour pousser vers Premium.</p>
  </div>
  <div class="dp-site-card">
    <div class="dp-site-name"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6cd.png" alt="🛍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Temu / SHEIN</div>
    <div class="dp-site-pattern">Urgence + Cookies</div>
    <p>Compteurs de stock et de promotion permanents, bandeaux cookies non conformes. Temu fait l'objet d'une procédure formelle de la Commission européenne.</p>
  </div>
  <div class="dp-site-card">
    <div class="dp-site-name"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Google</div>
    <div class="dp-site-pattern">Cookies tronqués</div>
    <p>Condamné à 325 M€ par la CNIL en 2025 pour des parcours de consentement orientés lors de la création de compte et des publicités "déguisées" dans Gmail.</p>
  </div>
</div>



<h2 class="wp-block-heading">Ce que dit la loi en France et en Europe</h2>



<div class="dp-law-box">
  <div class="dp-law-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2696.png" alt="⚖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Cadre légal 2024–2026</div>
  <ul>
    <li><strong>RGPD</strong> : les dark patterns liés aux cookies sont illégaux. Le consentement doit être libre, éclairé et sans ambiguïté.</li>
    <li><strong>DSA (Digital Services Act)</strong> : en vigueur depuis 2024, il interdit explicitement les interfaces trompeuses aux grandes plateformes.</li>
    <li><strong>CNIL</strong> : 87 sanctions en 2024 pour un total de 55,2 M€. En 2025 : 325 M€ contre Google seul pour dark patterns cookies.</li>
    <li><strong>Code de la Consommation</strong> (art. L.121-1) : les dark patterns constituent des pratiques commerciales trompeuses, passibles jusqu'à 3,75 M€ ou 10 % du CA.</li>
    <li><strong>DGCCRF</strong> : 105,3 M€ de sanctions en 2024 (+44 % vs 2022), dont 960 cas de pratiques commerciales trompeuses.</li>
  </ul>
</div>



<p class="wp-block-paragraph">Le message est clair : la tolérance zéro s'installe. La CNIL utilise désormais des <strong>"clients mystères numériques"</strong> pour contrôler les sites en incognito. Plus aucun site n'est à l'abri d'un contrôle.</p>



<h2 class="wp-block-heading">Comment s'en protéger au quotidien ?</h2>



<div class="dp-tips-box">
  <div class="dp-tips-title"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f6e1.png" alt="🛡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Vos réflexes anti-dark patterns</div>
  <ul>
    <li><strong>Prenez le temps de lire</strong> les écrans de paiement, surtout la dernière étape avant validation.</li>
    <li><strong>Cherchez le bouton "Refuser"</strong> sur les bandeaux cookies — il est souvent caché, mais il existe.</li>
    <li><strong>Méfiez-vous des urgences</strong> : un "Plus que 1 disponible !" qui dure depuis 3 jours n'est pas une urgence réelle.</li>
    <li><strong>Utilisez des extensions</strong> comme I don't care about cookies, uBlock Origin ou Consent-O-Matic pour automatiser les refus.</li>
    <li><strong>Vérifiez votre panier</strong> avant de payer : des options non désirées ont peut-être été ajoutées automatiquement.</li>
    <li><strong>Notez la date de fin d'essai</strong> dans votre agenda dès que vous vous inscrivez à un service gratuit.</li>
    <li><strong>Signalez</strong> les pratiques abusives à la CNIL (cnil.fr) ou à la DGCCRF.</li>
  </ul>
</div>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Les dark patterns sont partout — et leur efficacité tient précisément au fait qu'ils passent inaperçus. Mais les reconnaître, c'est déjà s'en protéger.</p>



<p class="wp-block-paragraph">Pour les professionnels du web, la question dépasse la technique : c'est une question d'<strong>éthique et de confiance</strong>. Un utilisateur qui se sent manipulé ne revient pas. À l'inverse, un design honnête — où "Refuser" est aussi facile que "Accepter", où les prix sont affichés clairement, où la résiliation prend 2 clics — est souvent aussi un design plus performant sur le long terme.</p>



<p class="wp-block-paragraph">Et avec le renforcement des sanctions (CNIL, DSA, DGCCRF), ce n'est plus seulement une question de bon goût. C'est une question de conformité légale.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="has-background wp-block-paragraph" style="background-color:#e6f1fb"><mark style="background-color:#ffffff" class="has-inline-color"><strong><em>Pour aller plus loin</em></strong></mark><br><br>Le site <a href="https://deceptive.design" target="_blank" rel="noreferrer noopener">deceptive.design</a> (anciennement darkpatterns.org), créé par Harry Brignull, recense des centaines d'exemples réels de dark patterns signalés par des internautes du monde entier. Une mine d'or pour les professionnels du web.</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/dark-patterns-web-manipulation/">Dark Patterns : quand le design vous manipule (sans que vous le sachiez)</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/dark-patterns-web-manipulation/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>« Maximum execution time exceeded » WordPress &#8211; Comment corriger l’erreur</title>
		<link>https://thibautsoufflet.fr/blog/maximum-execution-time-exceeded-wordpress/</link>
					<comments>https://thibautsoufflet.fr/blog/maximum-execution-time-exceeded-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 12:07:00 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7613</guid>

					<description><![CDATA[<p>Ton site affiche le message : Maximum execution time of 30 seconds exceeded Ou une variante similaire avec 60 ou 300 secondes ?Cela signifie que ton serveur coupe un script PHP parce qu’il met trop de temps à s’exécuter. Bonne nouvelle : cette erreur est facile à corriger. Pourquoi cette erreur apparaît Cette erreur survient [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/maximum-execution-time-exceeded-wordpress/">« Maximum execution time exceeded » WordPress &#8211; Comment corriger l’erreur</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Ton site affiche le message : <strong><em>Maximum execution time of 30 seconds exceeded</em></strong></p>



<p class="wp-block-paragraph">Ou une variante similaire avec 60 ou 300 secondes ?<br>Cela signifie que ton serveur coupe un script PHP parce qu’il met trop de temps à s’exécuter.</p>



<p class="wp-block-paragraph"><strong>Bonne nouvelle : cette erreur est facile à corriger</strong>.</p>



<h2 class="wp-block-heading">Pourquoi cette erreur apparaît</h2>



<p class="wp-block-paragraph">Cette erreur survient lorsque :</p>



<ul class="wp-block-list">
<li>Un plugin est trop lourd</li>



<li>Une importation est trop volumineuse</li>



<li>Une sauvegarde dépasse le temps limite</li>



<li>La limite PHP par défaut est trop basse (souvent 30s)</li>



<li>Le serveur est lent ou surchargé</li>
</ul>



<p class="wp-block-paragraph"><strong>WordPress n’est pas en cause : c’est une limite serveur</strong>.</p>



<h2 class="wp-block-heading">Solution rapide (en 3 étapes)</h2>



<ol class="wp-block-list">
<li>Augmenter <code>max_execution_time</code></li>



<li>Vérifier les plugins lourds</li>



<li>Optimiser la mémoire PHP</li>
</ol>



<h2 class="wp-block-heading">Guide détaillé</h2>



<h3 class="wp-block-heading">Étape 1 : Modifier le fichier wp-config.php</h3>



<p class="wp-block-paragraph">Ajoute cette ligne à la fin de ton fichier <code>wp-config.php</code> :</p>



<pre title="Augmentation du temps d'exécution serveur dans le fichier wp-config.php" class="wp-block-code"><code lang="php" class="language-php">set_time_limit(300);</code></pre>



<p class="wp-block-paragraph">Ou celle-ci :</p>



<pre title="Augmentation du temps d'exécution serveur dans le fichier wp-config.php" class="wp-block-code"><code lang="php" class="language-php">@ini_set('max_execution_time', 300);</code></pre>



<p class="wp-block-paragraph">Recharge ensuite ton site dans ton navigateur.</p>



<h3 class="wp-block-heading">Étape 2 : Modifier le fichier .htaccess</h3>



<p class="wp-block-paragraph">Ajoute ensuite ce code à la fin de ton fichier <code>.htaccess</code> :</p>



<pre title="Augmentation du temps d'exécution serveur dans le fichier .htaccess" class="wp-block-code"><code class="">php_value max_execution_time 300
php_value max_input_time 300</code></pre>



<h3 class="wp-block-heading">Étape 3 : Modifier le fichier php.ini (si accessible)</h3>



<pre title="Augmentation du temps d'exécution serveur dans le fichier .htaccess" class="wp-block-code"><code class="">max_execution_time = 300
max_input_time = 300</code></pre>



<h3 class="wp-block-heading">Étape 4 : Vérifier les plugins responsables</h3>



<p class="wp-block-paragraph">Les plugins souvent concernés :</p>



<ul class="wp-block-list">
<li>Extensions de sauvegarde</li>



<li>Plugins d’import/export</li>



<li>Plugins WooCommerce</li>



<li>Plugins de sécurité</li>
</ul>



<p class="wp-block-paragraph">Désactive-les temporairement pour tester si tu constates un changement.</p>



<h2 class="wp-block-heading">Code prêt à copier</h2>



<p class="wp-block-paragraph">Bloc complet de code recommandé dans <code>.htaccess</code> :</p>



<pre title="Code recommandé à insérer dans le fichier .htaccess pour augmenter la tolérance du serveur" class="wp-block-code"><code class="">php_value max_execution_time 300
php_value max_input_time 300
php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 256M</code></pre>



<h2 class="wp-block-heading">Cas hébergeurs connus</h2>



<h3 class="wp-block-heading">OVH</h3>



<p class="wp-block-paragraph">Modifier le fichier <code>.ovhconfig</code> :</p>



<pre title="Modification fichier .ovhconfig" class="wp-block-code"><code class="">app.engine=php
app.engine.version=8.1</code></pre>



<p class="wp-block-paragraph">Puis augmenter les limites via l’espace client.</p>



<h3 class="wp-block-heading">o2switch</h3>



<p class="wp-block-paragraph">cPanel → MultiPHP INI Editor → Modifier <code>max_execution_time</code>.</p>



<h3 class="wp-block-heading">Hostinger</h3>



<p class="wp-block-paragraph">Hébergement → Paramètres PHP → Augmenter la valeur.</p>



<h2 class="wp-block-heading">FAQ</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1770898399344"><strong class="schema-faq-question">Quelle valeur recommander ?</strong> <p class="schema-faq-answer">300 secondes est généralement suffisant.<br/>Pour les imports lourds, 600 secondes peut être utile.</p> </div> <div class="schema-faq-section" id="faq-question-1770898410915"><strong class="schema-faq-question">Cette erreur peut-elle casser mon site ?</strong> <p class="schema-faq-answer">Non. Elle empêche simplement une action de se terminer.</p> </div> <div class="schema-faq-section" id="faq-question-1770898418267"><strong class="schema-faq-question">Faut-il aussi augmenter la mémoire PHP ?</strong> <p class="schema-faq-answer">Oui, surtout si tu utilises WooCommerce ou un builder comme Elementor.</p> </div> </div>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">L’erreur "Maximum execution time exceeded" est liée aux limites serveur PHP.</p>



<p class="wp-block-paragraph">Dans la majorité des cas, augmenter le temps d’exécution à 300 secondes suffit.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Consulte également mon <a href="https://thibautsoufflet.fr/blog/erreurs-wordpress-frequentes/" type="post" id="7581">guide complet des erreurs WordPress les plus fréquentes</a> pour prévenir d’autres blocages.</p>



<div style="height:80px" aria-hidden="true" class="wp-block-spacer"></div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/maximum-execution-time-exceeded-wordpress/">« Maximum execution time exceeded » WordPress &#8211; Comment corriger l’erreur</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/maximum-execution-time-exceeded-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress n’envoie pas d’e-mail : comment corriger le problème</title>
		<link>https://thibautsoufflet.fr/blog/wordpress-mail-probleme/</link>
					<comments>https://thibautsoufflet.fr/blog/wordpress-mail-probleme/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Wed, 04 Mar 2026 12:00:00 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7611</guid>

					<description><![CDATA[<p>Tu utilises le formulaire de contact, la réinitialisation de mot de passe…Et pourtant aucun e-mail reçu ? C’est un problème très courant. Pourquoi cette erreur apparaît Solution rapide Guide détaillé Étape 1 : Installer WP Mail SMTP Plugin recommandé : WP Mail SMTP Étape 2 : Configurer SMTP Exemple configuration Gmail :SMTP Host : smtp.gmail.comPort [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/wordpress-mail-probleme/">WordPress n’envoie pas d’e-mail : comment corriger le problème</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Tu utilises le formulaire de contact, la réinitialisation de mot de passe…<br>Et pourtant aucun e-mail reçu ?</p>



<p class="wp-block-paragraph">C’est un problème très courant.</p>



<h2 class="wp-block-heading">Pourquoi cette erreur apparaît</h2>



<ul class="wp-block-list">
<li>Fonction mail() bloquée</li>



<li>Mauvaise configuration SMTP</li>



<li>Emails considérés comme spam</li>



<li>Hébergeur bloquant les envois</li>
</ul>



<h2 class="wp-block-heading">Solution rapide</h2>



<ol class="wp-block-list">
<li>Installer un plugin SMTP</li>



<li>Configurer un serveur SMTP fiable</li>



<li>Tester l’envoi</li>
</ol>



<h2 class="wp-block-heading">Guide détaillé</h2>



<h3 class="wp-block-heading">Étape 1 : Installer WP Mail SMTP</h3>



<p class="wp-block-paragraph">Plugin recommandé : <a href="https://fr.wordpress.org/plugins/wp-mail-smtp/">WP Mail SMTP</a></p>



<h3 class="wp-block-heading">Étape 2 : Configurer SMTP</h3>



<p class="wp-block-paragraph">Exemple configuration Gmail :<br>SMTP Host : smtp.gmail.com<br>Port : 587<br>Encryption : TLS</p>



<p class="wp-block-paragraph">À toi de voir ces paramètres selon votre hébergeur ou client mail, laa doc en ligne t'aidera rapidement.</p>



<h3 class="wp-block-heading">Étape 3 : Tester</h3>



<p class="wp-block-paragraph">Utiliser l’outil de test d’e-mail intégré à WP Mail SMTP.</p>



<h2 class="wp-block-heading">Cas hébergeurs</h2>



<p class="wp-block-paragraph">OVH : mail() souvent limité<br>o2switch : fonctionne mais SMTP recommandé<br>Hostinger : activer email externe</p>



<h2 class="wp-block-heading">FAQ</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1770897870539"><strong class="schema-faq-question">Pourquoi WordPress ne reçoit pas d’email ?</strong> <p class="schema-faq-answer">Parce que PHP mail() n’est pas fiable.</p> </div> <div class="schema-faq-section" id="faq-question-1770897881139"><strong class="schema-faq-question">Faut-il utiliser SMTP ?</strong> <p class="schema-faq-answer">Oui, c’est la solution recommandée.</p> </div> </div>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Configurer SMTP règle le problème dans 95 % des cas.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Consulte notre <a href="https://thibautsoufflet.fr/blog/erreurs-wordpress-frequentes/" type="post" id="7581">guide des erreurs WordPress</a> pour prévenir d’autres blocages.</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/wordpress-mail-probleme/">WordPress n’envoie pas d’e-mail : comment corriger le problème</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/wordpress-mail-probleme/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Allowed memory size exhausted WordPress : comment corriger l’erreur</title>
		<link>https://thibautsoufflet.fr/blog/allowed-memory-size-exhausted-wordpress/</link>
					<comments>https://thibautsoufflet.fr/blog/allowed-memory-size-exhausted-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Tue, 03 Mar 2026 11:56:00 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7609</guid>

					<description><![CDATA[<p>Le message suivant apparaît : Allowed memory size of X bytes exhausted Cela signifie que la mémoire PHP est insuffisante. Pourquoi cette erreur apparaît Solution rapide Guide détaillé Étape 1 : Modifier wp-config.php Étape 2 : Modifier php.ini Étape 3 : Identifier plugin lourd Désactive temporairement les plugins, puis réactive-les un à un pour identifier [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/allowed-memory-size-exhausted-wordpress/">Allowed memory size exhausted WordPress : comment corriger l’erreur</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Le message suivant apparaît : <strong><em>Allowed memory size of X bytes exhausted</em></strong></p>



<p class="wp-block-paragraph">Cela signifie que la mémoire PHP est insuffisante.</p>



<h2 class="wp-block-heading">Pourquoi cette erreur apparaît</h2>



<ul class="wp-block-list">
<li>Plugin gourmand</li>



<li>Thème lourd</li>



<li>Import volumineux</li>



<li>Mémoire serveur trop faible</li>
</ul>



<h2 class="wp-block-heading">Solution rapide</h2>



<ol class="wp-block-list">
<li>Augmenter WP_MEMORY_LIMIT</li>



<li>Modifier php.ini</li>



<li>Vérifier plugin responsable</li>
</ol>



<h2 class="wp-block-heading">Guide détaillé</h2>



<h3 class="wp-block-heading">Étape 1 : Modifier wp-config.php</h3>



<pre title="Augmenter la mémoire dans wp-config.php" class="wp-block-code"><code lang="php" class="language-php">define('WP_MEMORY_LIMIT', '256M');</code></pre>



<h3 class="wp-block-heading">Étape 2 : Modifier php.ini</h3>



<pre title="Augmenter la mémoire dans php.ini" class="wp-block-code"><code lang="" class="">memory_limit = 256M</code></pre>



<h3 class="wp-block-heading">Étape 3 : Identifier plugin lourd</h3>



<p class="wp-block-paragraph">Désactive temporairement les plugins, puis réactive-les un à un pour identifier lesquels sont responsables du surpoids.</p>



<h2 class="wp-block-heading">Cas hébergeurs</h2>



<p class="wp-block-paragraph">OVH : augmenter via .ovhconfig<br>o2switch : MultiPHP INI Editor<br>Hostinger : Paramètres PHP</p>



<h2 class="wp-block-heading">FAQ</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1770897518798"><strong class="schema-faq-question">Quelle mémoire recommander ?</strong> <p class="schema-faq-answer">Minimum 256M pour WordPress moderne.</p> </div> </div>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Cette erreur est liée aux limites serveur, pas à WordPress lui-même.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Consulte notre <a href="https://thibautsoufflet.fr/blog/erreurs-wordpress-frequentes/" type="post" id="7581">liste complète des erreurs WordPress</a>.</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/allowed-memory-size-exhausted-wordpress/">Allowed memory size exhausted WordPress : comment corriger l’erreur</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/allowed-memory-size-exhausted-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Erreur REST API WordPress : comment corriger le problème</title>
		<link>https://thibautsoufflet.fr/blog/erreur-rest-api-wordpress/</link>
					<comments>https://thibautsoufflet.fr/blog/erreur-rest-api-wordpress/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 11:51:00 +0000</pubDate>
				<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7607</guid>

					<description><![CDATA[<p>Si l'API REST ne fonctionne pas, tu peux rencontrer les messages d'erreurs WordPress suivants : Pas de panique, voici comment diagnostiquer et réparer l'erreur liée à l'API REST. Pourquoi cette erreur apparaît Solution rapide Guide détaillé Étape 1 : Tester la REST API Appelle le dossier wp-json via l'url suivante : Si une erreur apparaît [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/erreur-rest-api-wordpress/">Erreur REST API WordPress : comment corriger le problème</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Si l'API REST ne fonctionne pas, tu peux rencontrer les messages d'erreurs WordPress suivants :</p>



<ul class="wp-block-list">
<li>Publication échouée</li>



<li>Mise à jour impossible</li>



<li>Erreur JSON</li>



<li>Bloc éditeur non fonctionnel</li>
</ul>



<p class="wp-block-paragraph">Pas de panique, voici comment diagnostiquer et réparer l'erreur liée à l'API REST.</p>



<h2 class="wp-block-heading">Pourquoi cette erreur apparaît</h2>



<ul class="wp-block-list">
<li>Conflit de plugin de sécurité</li>



<li>Mauvaise configuration .htaccess</li>



<li>Hébergement bloquant certaines requêtes</li>



<li>Problème HTTPS</li>
</ul>



<h2 class="wp-block-heading">Solution rapide</h2>



<ol class="wp-block-list">
<li>Tester la REST API</li>



<li>Vérifier le .htaccess</li>



<li>Désactiver plugins sécurité</li>
</ol>



<h2 class="wp-block-heading">Guide détaillé</h2>



<h3 class="wp-block-heading">Étape 1 : Tester la REST API</h3>



<p class="wp-block-paragraph">Appelle le dossier <code>wp-json</code> via l'url suivante :</p>



<pre class="wp-block-code"><code class="">https://votresite.com/wp-json/</code></pre>



<p class="wp-block-paragraph">Si une erreur apparaît → alors le problème est confirmé.</p>



<h3 class="wp-block-heading">Étape 2 : Vérifier le .htaccess</h3>



<p class="wp-block-paragraph">Code standard :</p>



<pre title="Code d'origine du .htaccess WordPress" class="wp-block-code"><code class=""># BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress</code></pre>



<h3 class="wp-block-heading">Étape 3 : Désactiver les plugins de sécurité</h3>



<p class="wp-block-paragraph">Wordfence, iThemes Security, etc. peuvent modifier certains paramètres WordPress et provoquer l'erreur d'API REST. Essaie de les désactiver pour tester si cela résouts le problème. </p>



<h2 class="wp-block-heading">Cas hébergeurs</h2>



<p class="wp-block-paragraph">OVH : vérifie le module PHP<br>IONOS : activer mod_rewrite<br>o2switch : rarement bloqué</p>



<h2 class="wp-block-heading">FAQ</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1770897253730"><strong class="schema-faq-question">L'API REST est-elle indispensable ?</strong> <p class="schema-faq-answer">Oui, pour Gutenberg et beaucoup de plugins modernes.</p> </div> </div>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph">Une REST API bloquée empêche WordPress de fonctionner correctement.</p>



<p class="wp-block-paragraph"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f449.png" alt="👉" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Voir aussi notre <a href="https://thibautsoufflet.fr/blog/erreurs-wordpress-frequentes/" type="post" id="7581">guide des erreurs WordPress fréquentes</a>.</p>



<div style="height:60px" aria-hidden="true" class="wp-block-spacer"></div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/erreur-rest-api-wordpress/">Erreur REST API WordPress : comment corriger le problème</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/erreur-rest-api-wordpress/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Nouveauté CSS en 2026 &#8211; un carousel sans JavaScript avec ::scroll-button</title>
		<link>https://thibautsoufflet.fr/blog/css-scroll-button-carousel-natif-sans-javascript/</link>
					<comments>https://thibautsoufflet.fr/blog/css-scroll-button-carousel-natif-sans-javascript/#respond</comments>
		
		<dc:creator><![CDATA[thibaut]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 09:59:19 +0000</pubDate>
				<category><![CDATA[Web pratique]]></category>
		<guid isPermaLink="false">https://thibautsoufflet.fr/?p=7721</guid>

					<description><![CDATA[<p>Après la personnalisation des &#60;select&#62; et le Masonry sans JavaScript avec grid-lanes, le CSS continue sa conquête du territoire JavaScript avec une nouvelle propriété pseudo-élément : ::scroll-button(). Elle permet de générer nativement des boutons de navigation pour les conteneurs scrollables, sans écrire une seule ligne de JS. Pourquoi c'est une vraie amélioration ? Jusqu'ici, créer [&#8230;]</p>
<p>L’article <a href="https://thibautsoufflet.fr/blog/css-scroll-button-carousel-natif-sans-javascript/">Nouveauté CSS en 2026 &#8211; un carousel sans JavaScript avec ::scroll-button</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Après la <a href="https://thibautsoufflet.fr/blog/personnaliser-liste-select-css-sans-javascript/" type="post" id="7726">personnalisation des <code>&lt;select&gt;</code></a> et le <a href="https://thibautsoufflet.fr/blog/css-grid-lanes-fini-le-mansonry-javascript-en-2026/" type="post" id="7724">Masonry sans JavaScript avec <code>grid-lanes</code></a>, le CSS continue sa conquête du territoire JavaScript avec une nouvelle propriété pseudo-élément : <code>::scroll-button()</code>. Elle permet de <strong>générer nativement des boutons de navigation pour les conteneurs scrollables</strong>, sans écrire une seule ligne de JS.</p>



<h2 class="wp-block-heading">Pourquoi c'est une vraie amélioration ?</h2>



<p class="wp-block-paragraph">Jusqu'ici, créer un carousel avec des boutons "précédent / suivant" imposait systématiquement du JavaScript : écouter les clics, calculer la position de scroll, gérer les états désactivés en bout de liste… Autant de code à maintenir, à tester et à rendre accessible.</p>



<p class="wp-block-paragraph">Avec <code>::scroll-button()</code>, le navigateur prend en charge tout ça nativement :</p>



<ul class="wp-block-list">
<li>Les boutons sont <strong>générés automatiquement</strong> par le CSS, sans aucun <code>&lt;button&gt;</code> dans le HTML</li>



<li>L'état <strong><code>:disabled</code></strong> est appliqué automatiquement quand le scroll atteint ses limites</li>



<li>La <strong>navigation au clavier</strong> et l'<strong>accessibilité</strong> sont gérées par le navigateur</li>



<li>Combiné à <code>scroll-snap-type</code>, le défilement s'effectue snap par snap, de façon précise</li>
</ul>



<h2 class="wp-block-heading">Démo de carousel pur CSS avec ::scroll-button</h2>



<figure class="wp-block-image size-full"><img decoding="async" width="800" height="407" src="https://thibautsoufflet.fr/wp-content/uploads/2026/03/carouselenpurcssavec__scroll-button-googlechrome2026-03-0210-37-05-ezgif.com-video-to-gif-converter.gif" alt="Démo de Carousel élégant réalisé en HTML et CSS sans aucun code JavaScript. Avec la nouvelle propriété CSS scroll-button." class="wp-image-7828 img-fluid"/></figure>



<p class="wp-block-paragraph"><em>Note : cette fonctionnalité requiert Chrome 135+ ou Edge 135+</em></p>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="codepen" data-height="796" data-pen-title="Carousel en pur CSS avec ::scroll-button" data-default-tab="result" data-slug-hash="pvEjPzG" data-user="Tibow" style="height: 796px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/Tibow/pen/pvEjPzG">
  Carousel en pur CSS avec ::scroll-button</a> by Tibow (<a href="https://codepen.io/Tibow">@Tibow</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>



<div style="height:50px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph"><strong>Le résultat est incroyablement fluide et convaincant</strong>. Voyons maintenant les compatibilités navigateurs et comment marche cette petite merveille en détails !</p>



<h2 class="wp-block-heading">Compatibilité avec les navigateurs modernes</h2>



<p class="wp-block-paragraph"><code>::scroll-button()</code> est une propriété <strong>très récente</strong> et prometteuse pour 2026, et elle est supportée (pour le moment) uniquement par Chrome et Edge 135 +</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;6a70a3a28828a&quot;}" data-wp-interactive="core/image" data-wp-key="6a70a3a28828a" class="wp-block-image size-large wp-lightbox-container"><img decoding="async" width="1024" height="387" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on--click="actions.showLightbox" data-wp-on--load="callbacks.setButtonStyles" data-wp-on--pointerdown="actions.preloadImage" data-wp-on--pointerenter="actions.preloadImageWithDelay" data-wp-on--pointerleave="actions.cancelPreload" data-wp-on-window--resize="callbacks.setButtonStyles" src="https://thibautsoufflet.fr/wp-content/uploads/2026/03/fireshot-capture-062-_scroll-button_-can-i-use.-support-tables-for-html5-css3-etc_-caniuse.com_-1024x387.png" alt="Can I Use : Tableau des compatibilités navigateurs de la propriété scroll-button" class="wp-image-7833 img-fluid" srcset="https://thibautsoufflet.fr/wp-content/uploads/2026/03/fireshot-capture-062-_scroll-button_-can-i-use.-support-tables-for-html5-css3-etc_-caniuse.com_-1024x387.png 1024w, https://thibautsoufflet.fr/wp-content/uploads/2026/03/fireshot-capture-062-_scroll-button_-can-i-use.-support-tables-for-html5-css3-etc_-caniuse.com_-300x113.png 300w, https://thibautsoufflet.fr/wp-content/uploads/2026/03/fireshot-capture-062-_scroll-button_-can-i-use.-support-tables-for-html5-css3-etc_-caniuse.com_-768x290.png 768w, https://thibautsoufflet.fr/wp-content/uploads/2026/03/fireshot-capture-062-_scroll-button_-can-i-use.-support-tables-for-html5-css3-etc_-caniuse.com_.png 1374w" sizes="(max-width: 1024px) 100vw, 1024px" /><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			data-wp-bind--aria-label="state.thisImage.triggerButtonAriaLabel"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on--click="actions.showLightbox"
			data-wp-style--right="state.thisImage.buttonRight"
			data-wp-style--top="state.thisImage.buttonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button><figcaption class="wp-element-caption">Tableau des compatibilités navigateur avec la propriété CSS scroll-button</figcaption></figure>



<p class="wp-block-paragraph"><strong>Bonne pratique</strong> : la dégradation est gracieuse. Sur les navigateurs non compatibles, le conteneur reste scrollable (touch, trackpad, barre de défilement) — les boutons disparaissent simplement. Pas d'erreur, pas de JavaScript à prévoir.</p>



<h2 class="wp-block-heading">Comment ça fonctionne : sémantique et balisage</h2>



<h3 class="wp-block-heading">Le HTML : minimaliste</h3>



<p class="wp-block-paragraph">Aucun bouton à ajouter dans le markup. Le conteneur scroll suffit :</p>



<pre class="wp-block-code"><code lang="markup" class="language-markup">&lt;div class="carousel">
  &lt;article class="card">&lt;!-- contenu -->&lt;/article>
  &lt;article class="card">&lt;!-- contenu -->&lt;/article>
  &lt;article class="card">&lt;!-- contenu -->&lt;/article>
&lt;/div></code></pre>



<h3 class="wp-block-heading">Le CSS : tout se passe ici</h3>



<pre class="wp-block-code"><code lang="css" class="language-css">.carousel {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
}

/* Bouton "précédent" */
.carousel::scroll-button(inline-start) {
  content: "←";           /* OBLIGATOIRE pour afficher le bouton */
  display: flex;
  width: 3rem;
  height: 3rem;
  background: #1a1612;
  color: white;
  border-radius: 50%;
  cursor: pointer;
}

/* Bouton "suivant" */
.carousel::scroll-button(inline-end) {
  content: "→";
  /* mêmes styles */
}</code></pre>



<h3 class="wp-block-heading">Les valeurs acceptées par <code>::scroll-button()</code></h3>



<p class="wp-block-paragraph">La propriété accepte <strong>4 directions</strong> correspondant aux axes logiques CSS :</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Valeur</th><th>Direction</th></tr></thead><tbody><tr><td><code>inline-start</code></td><td>← (début de ligne, gauche en LTR)</td></tr><tr><td><code>inline-end</code></td><td>→ (fin de ligne, droite en LTR)</td></tr><tr><td><code>block-start</code></td><td>↑ (début de bloc, haut)</td></tr><tr><td><code>block-end</code></td><td>↓ (fin de bloc, bas)</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">Cela permet de gérer aussi bien les scrolls <strong>horizontaux</strong> que <strong>verticaux</strong>, et les contextes <strong>RTL</strong> (arabe, hébreu) sans aucune adaptation CSS.</p>



<h3 class="wp-block-heading">La propriété <code>content</code> est obligatoire</h3>



<p class="wp-block-paragraph">Comme pour <code>::before</code> et <code>::after</code>, la propriété <code>content</code> est <strong>indispensable</strong> pour que le pseudo-élément s'affiche. Sans elle, le bouton n'est pas rendu.</p>



<pre title="Ne pas oublier la propriété content" class="wp-block-code"><code lang="css" class="language-css">/* <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Ne s'affiche pas */
.carousel::scroll-button(inline-end) {
  background: black;
}

/* <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> S'affiche */
.carousel::scroll-button(inline-end) {
  content: "→";
  background: black;
}</code></pre>



<h3 class="wp-block-heading">Gérer les états <code>:disabled</code> et <code>:hover</code></h3>



<p class="wp-block-paragraph">Le navigateur applique automatiquement <code>:disabled</code> quand le scroll ne peut plus aller dans une direction. On peut cibler cet état directement :</p>



<pre title="Gérer les états :disabled et :hover" class="wp-block-code"><code lang="css" class="language-css">.carousel::scroll-button(inline-start):disabled,
.carousel::scroll-button(inline-end):disabled {
  opacity: 0.2;
  pointer-events: none;
}

.carousel::scroll-button(inline-end):hover {
  background: #c8502a;
}</code></pre>



<h3 class="wp-block-heading">Bonus : les points de pagination avec <code>::scroll-marker</code></h3>



<p class="wp-block-paragraph">Dans la même spec, <code>::scroll-marker</code> permet de générer des <strong>indicateurs de position</strong> (les fameux "dots") eux aussi sans JavaScript :</p>



<pre title="Points de pagination avec ::scroll-marker" class="wp-block-code"><code lang="css" class="language-css">/* Groupe de dots généré automatiquement */
.carousel::scroll-marker-group {
  display: flex;
  gap: 0.5rem;
  justify-content: center;
}

/* Un dot par élément */
.card::scroll-marker {
  content: "";
  width: 0.5rem;
  height: 0.5rem;
  border-radius: 50%;
  background: #ccc;
}

/* Dot actif */
.card::scroll-marker:target-current {
  background: #c8502a;
  width: 1.5rem;
  border-radius: 0.25rem;
}</code></pre>



<h2 class="wp-block-heading">Conclusion</h2>



<p class="wp-block-paragraph"><code>::scroll-button()</code> s'inscrit dans une tendance de fond : le CSS reprend progressivement des interactions que seul JavaScript pouvait gérer jusqu'ici. Après les animations complexes, les transitions de vue avec <code>@view-transition</code>, ou encore la personnalisation des éléments de formulaire, c'est maintenant la navigation des conteneurs scrollables qui bascule côté CSS natif.</p>



<p class="wp-block-paragraph">Le résultat : un HTML plus sémantique, moins de JavaScript à maintenir, de meilleures performances et une accessibilité gérée nativement par le navigateur.</p>



<p class="wp-block-paragraph"><strong>C'est aujourd'hui limité à Chrome 135+</strong>, mais la spec est en bonne voie et Firefox a déjà annoncé son implémentation. À surveiller de près, et à tester dès maintenant sur vos projets CodePen !</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>
<p>L’article <a href="https://thibautsoufflet.fr/blog/css-scroll-button-carousel-natif-sans-javascript/">Nouveauté CSS en 2026 &#8211; un carousel sans JavaScript avec ::scroll-button</a> est apparu en premier sur <a href="https://thibautsoufflet.fr">Tibow Webdesign</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://thibautsoufflet.fr/blog/css-scroll-button-carousel-natif-sans-javascript/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
