Mis à jour le 1er novembre 2026. Article réécrit pour la version 9.4.0 de l’extension ActivityPub (29 octobre 2026) : libellés réels des réglages, valeurs par défaut lues dans le code, onglet de modération, comportement du cache, configuration Nginx testée et limites documentées.
L’extension ActivityPub transforme un site WordPress en compte du fediverse. Les abonnés de Mastodon, Pixelfed, Misskey ou Friendica reçoivent les nouvelles publications, et leurs réponses reviennent sous forme de commentaires. Ce n’est pas un outil de publication croisée : votre site devient son propre compte, il ne publie pas sur un compte Mastodon existant. Ce guide détaille les réglages, ce qui se passe réellement sur le serveur, et les points à tester avant d’ouvrir le service.
L’extension en bref
| Élément | Valeur relevée le 1er novembre 2026 |
|---|---|
| Éditeur | Automattic, avec plusieurs contributeurs dont Matthias Pfefferle |
| Version | 9.4.0, publiée le 29 octobre 2026 |
| Prérequis | WordPress 6.5 ou plus récent, PHP 7.4 ou plus récent |
| Testée jusqu’à | WordPress 7.1.4 |
| Licence du dépôt | MIT |
| Réglages | Réglages > ActivityPub |
Le rythme de publication est soutenu : dix versions entre le 10 juin (9.0.0) et le 29 octobre 2026, dont des correctifs de sécurité (9.1.0 pour les applications connectées et les profils distants, 9.3.1 pour la vérification des signatures et des réponses exposées par l’API REST). Activez les mises à jour automatiques de cette extension ou suivez-les de près.
Avant l’installation
- HTTPS sur le domaine public. Voir la redirection HTTP vers HTTPS sur WordPress.
- Permaliens personnalisés : le profil du blog dépend des règles de réécriture.
- Archives d’auteur actives : les profils d’auteur cessent de fonctionner si une extension SEO désactive les pages d’archive des auteurs. C’est un piège fréquent avec les réglages par défaut de certains sites vitrines.
- Un cron fiable : les envois passent par une tâche planifiée différée. La fiche officielle prévient qu’une publication peut mettre environ 15 minutes à apparaître. Sur un site peu visité, WP-Cron ne se déclenche qu’aux visites ; remplacez-le par un cron système (voir la configuration d’une tâche cron).
// wp-config.php
define( 'DISABLE_WP_CRON', true );
*/5 * * * * curl -s -o /dev/null "https://votredomaine.tld/wp-cron.php?doing_wp_cron"
Les réglages, tels qu’ils apparaissent
Après activation, l’écran Réglages > ActivityPub regroupe l’accueil, les réglages, la liste des abonnés et celle des acteurs bloqués ; un onglet de réglages avancés et un onglet des comptes suivis peuvent être affichés en plus. Voici les réglages principaux et leurs valeurs par défaut, lues dans le code de l’extension.
| Réglage (libellé anglais d’origine) | Effet | Par défaut |
|---|---|---|
| Enable profiles by type | Profils d’auteur seuls, profil du blog seul, ou les deux | Profils d’auteur seuls |
| Supported post types | Types de contenus diffusés | Articles uniquement |
| Media attachments | Nombre d’images jointes, de 0 à 10 | 4 |
| Receive likes / Receive reblogs | Accepter les « j’aime » et les partages | Activés |
| Auto approve reactions | Approuver automatiquement ces réactions | Désactivé |
| Show images attached to replies | Afficher les images jointes aux réponses | Désactivé |
| Default quote policy | Qui peut citer vos publications | Tout le monde |
| Hashtags | Transformer les #mots en hashtags | Désactivé |
| OpenGraph | Ajouter la balise fediverse:creator | Activé |
Deux conseils de départ. Choisissez « profil du blog seul » pour un site d’entreprise : un compte unique, plus simple à modérer, sans exposer le nom et la photo de chaque rédacteur. Si vous activez les profils d’auteur, informez chaque auteur que son nom, sa biographie et son avatar deviennent publics sur d’autres serveurs.
Seules les publications faites après l’installation sont diffusées, et un abonné ne reçoit que ce qui est publié après son abonnement. N’attendez donc pas que vos archives apparaissent dans le fediverse.
L’onglet Avancé
Il contient des réglages qui ont un effet direct sur l’hébergement :
- Distribution Mode (ajouté en 9.0.0) : règle le rythme d’envoi par lots, avec un mode personnalisé (taille des lots, pause entre les lots).
- Vary Header et Content Negotiation (activés) : la même adresse sert une page HTML aux navigateurs et du JSON aux serveurs du fediverse.
- Authorized Fetch (désactivé) : exige une signature HTTP pour lire vos contenus publics. L’aide prévient que certains logiciels anciens ne le gèrent pas et que le cache devient impossible.
- Modern Signature Format (activé) : signatures RFC 9421, par défaut depuis la 9.3.0, avec repli automatique sur l’ancien format.
Ce qui se passe sur le serveur
WebFinger et NodeInfo
Un serveur distant retrouve @blog@votredomaine.tld grâce à WebFinger, servi sur /.well-known/webfinger, puis lit les informations du logiciel sur /.well-known/nodeinfo. Ces routes passent par WordPress. Une règle Nginx qui interdit les chemins commençant par un point (location ~ /\.) les bloque. Ajoutez une exception :
location ^~ /.well-known/ {
try_files $uri /index.php?$args;
}
Nous avons testé ce bloc avec Nginx 1.28.2 dans une configuration isolée, à côté d’une règle location ~ /\. { deny all; } : /.well-known/webfinger et /.well-known/nodeinfo sont transmis à index.php, un fichier réel comme /.well-known/acme-challenge/test reste servi tel quel (renouvellement Let’s Encrypt), et /.env reste refusé en 403. Le préfixe ^~ l’emporte sur l’expression régulière, quel que soit l’ordre des blocs.
Vérifiez ensuite depuis l’extérieur :
curl -s "https://votredomaine.tld/.well-known/webfinger?resource=acct:blog@votredomaine.tld"
curl -sL -H "Accept: application/activity+json" "ADRESSE_DU_PROFIL"
La première commande doit renvoyer un document JSON dont un lien rel="self" donne l’adresse du profil ; remplacez blog par l’identifiant affiché dans les réglages. La seconde, lancée sur cette adresse, doit renvoyer le profil au format ActivityPub, et non une page HTML.
Cache de pages
Depuis la 9.2.0 (31 juillet 2026), les réponses ActivityPub ne sont servies qu’aux clients ActivityPub, ce qui les tient à l’écart des caches de pages. L’en-tête Vary: Accept complète ce dispositif. Si un cache en amont (Varnish, CDN) ignore cet en-tête, un visiteur peut recevoir du JSON ou un serveur distant du HTML. Testez une page avec et sans l’en-tête Accept: application/activity+json après avoir vidé le cache.
Charge
Chaque publication part vers chaque serveur abonné. La charge dépend du nombre d’instances abonnées et du rythme de publication, pas du trafic du site. En cas d’échec temporaire (codes 408, 429, 500, 502, 503 et 504), l’envoi est retenté. Un cache objet persistant aide, mais mesurez son effet au lieu de le supposer. Pour le reste, voir notre guide Core Web Vitals pour WordPress.
Modérer les interactions entrantes
Une réponse venue du fediverse devient un commentaire WordPress et suit vos règles de Réglages > Discussion. Gardez l’approbation manuelle au démarrage.
La section de modération des réglages propose trois outils :
- Blocked Domains : bloque une instance entière.
- Blocked Keywords : écarte les contenus qui contiennent certains mots.
- Blocklist Subscriptions : abonnement à des listes de blocage distantes, synchronisées chaque semaine, avec un abonnement en un clic à la liste « DNI » d’IFTAS.
Depuis la 9.4.0, un compte bloqué ne peut plus répondre, aimer, partager ni citer vos contenus, et des limites de débit protègent plusieurs points d’accès. Pour couper toute interaction entrante, la constante ACTIVITYPUB_DISABLE_INCOMING_INTERACTIONS désactive réponses, commentaires et « j’aime » ; c’est aussi la première chose à vérifier quand les réponses n’arrivent plus.
Si vous ajoutez un filtre automatique (anti-spam, toxicité) qui envoie le texte à une API tierce, les messages quittent votre serveur : mentionnez-le dans votre politique de confidentialité et gardez une validation humaine.
Données publiées, données reçues
| Données | Origine | Ce que vous maîtrisez |
|---|---|---|
| Nom, biographie, avatar des profils activés | Votre site | Le choix d’activer chaque profil |
| Publications diffusées | Votre site | Leur contenu ; pas les copies déjà reçues ailleurs |
| Identifiant, nom, avatar et texte des comptes qui répondent | Serveurs distants, parfois hors Union européenne | Modération, durée de conservation, suppression |
| Avatars, médias et émojis distants mis en cache | Serveurs distants | Désactivables avec ACTIVITYPUB_DISABLE_REMOTE_CACHE |
L’extension traite les activités de suppression entrantes : depuis la 9.2.2, une réponse supprimée sur Mastodon supprime le commentaire correspondant. Dans l’autre sens, la 9.0.0 envoie un avis de suppression quand vous dépubliez un contenu déjà diffusé, mais chaque serveur distant décide de l’appliquer. Inscrivez ce traitement dans votre registre (finalité, durées, transferts) et mettez à jour la politique de confidentialité ; la base légale relève d’un avis juridique.
Les limites à connaître
- Pas d’historique : les contenus antérieurs à l’installation ne sont pas diffusés.
- Pas d’effacement garanti : une copie reçue par un autre serveur échappe à votre contrôle.
- Délai : jusqu’à environ 15 minutes entre la publication et l’arrivée dans les fils.
- Fonctions expérimentales : le lecteur de fils (WordPress 7.0 ou plus récent) et l’accès OAuth pour des applications tierces sont marqués expérimentaux et désactivés par défaut.
- Compatibilité variable : chaque logiciel du fediverse affiche différemment titres, images et longueurs. La forme du contenu envoyé est automatique par défaut ; un modèle personnalisé n’est possible qu’en mode « note ».
Protocole de test
- En préproduction, activez l’extension et choisissez le mode de profil.
- Testez WebFinger et le profil avec les deux commandes
curlci-dessus. - Depuis un compte Mastodon, recherchez
@blog@votredomaine.tldet abonnez-vous. - Publiez un article de test et notez le délai d’arrivée.
- Répondez depuis Mastodon et vérifiez que le commentaire attend votre approbation.
- Bloquez l’instance de test, puis vérifiez qu’une nouvelle réponse n’arrive plus.
- Supprimez la réponse sur Mastodon et contrôlez la disparition du commentaire.
Questions fréquentes
L’extension publie-t-elle sur mon compte Mastodon existant ?
Non. Le site devient un compte à part entière, suivi sous la forme @identifiant@votredomaine.tld. Pour relayer sur un compte existant, il faut un outil de publication croisée.
Pourquoi mon profil d’auteur est-il introuvable ?
Vérifiez d’abord que les archives d’auteur ne sont pas désactivées par une extension SEO, puis que /.well-known/webfinger répond. Le mode par défaut ne crée que des profils d’auteur : le profil du blog doit être activé explicitement.
Mes anciens articles apparaîtront-ils dans le fediverse ?
Non. Seules les publications postérieures à l’installation sont diffusées, et chaque abonné ne reçoit que ce qui est publié après son abonnement.
Comment couper les réponses sans désinstaller l’extension ?
Définissez ACTIVITYPUB_DISABLE_INCOMING_INTERACTIONS à true dans wp-config.php. Pour un problème ciblé, bloquez plutôt le domaine concerné dans la section de modération.
Sources
- WordPress.org, extension ActivityPub (version 9.4.0, description, FAQ, constantes et journal des modifications, relevés le 1er novembre 2026) : https://wordpress.org/plugins/activitypub/
- Dépôt GitHub Automattic/wordpress-activitypub, FEDERATION.md (WebFinger, NodeInfo, signatures, activités prises en charge) : https://github.com/Automattic/wordpress-activitypub/blob/trunk/FEDERATION.md
- Code de l’extension sur GitHub (branche principale, lu le 1er novembre 2026) :
includes/wp-admin/class-settings-fields.php,includes/wp-admin/class-advanced-settings-fields.php,includes/constants.php. - IETF, RFC 7033 WebFinger : https://www.rfc-editor.org/rfc/rfc7033
- IETF, RFC 9421 HTTP Message Signatures : https://www.rfc-editor.org/rfc/rfc9421