Intoduction
Etant une extension tierce, Yoast SEO n’est pas intégrée dans l’API de WordPress. Mais heureusement pour nous il est toujours possible de mettre à jour les champs utilisés par Yoast comme le meta title, description, etc.
Pour ce faire, nous allons installer un plugin qui nous facilitera grandement la tâche. Recherchez et installez l’extension « REST API Meta Support ».

Comme vous pouvez le voir, la dernière mise à jour est assez vieille et n’a pas été testée avec les versions plus récentes de WordPress. Mon site utilise la version 6.1.1 de WordPress, c’est pourquoi l’avertissement « Non testé avec votre version de WordPress » est affiché. Qu’à cela ne tienne, j’ai quand même essayé et ça fonctionne.
Utilisation de l’API
Pour utiliser l’API nous allons réutiliser les mêmes classes que nous avons vues dans l’article Créer un article WordPress grâce à l’API REST.
Ici, nous ne pouvons pas utiliser le package Nuget « WordPressPCL » présenté à la fin de l’article car il ne gère pas les champs de Yoast. On va donc modifier la classe WordPressApiClient.
Tout d’abord il faut une classe pour y mettre les infos meta, avec les noms qui correspondent à la documentation de l’extension :

On va donc remplacer le FormUrlEncodedContent qui ne peut contenir qu’une liste de string, en un objet json sérialisé.
public async Task<CreatePostResponse> CreatePost(Article article)
{
using (var client = new HttpClient())
{
client.BaseAddress = baseUrl;
client.DefaultRequestHeaders.Add("Authorization", $"Basic {Convert.ToBase64String(Encoding.UTF8.GetBytes($"{Login}:{Password}"))}");
var entity = JsonConvert.SerializeObject(article);
var postBody = new StringContent(entity, Encoding.UTF8, "application/json");
var response = await client.PostAsync("posts", postBody);
var responseString = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<CreatePostResponse>(responseString);
}
}
Et voici les classes Articles et ArticleMeta :
public class Article
{
[JsonProperty("title", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Title { get; set; }
[JsonProperty("content", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Content { get; set; }
[JsonProperty("status", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string Status { get; set; }
[JsonProperty("categories", DefaultValueHandling = DefaultValueHandling.Ignore)]
public IEnumerable<int> Categories { get; set; }
[JsonProperty("featured_media", DefaultValueHandling = DefaultValueHandling.Ignore)]
public int? FeaturedMedia { get; set; }
[JsonProperty("meta", DefaultValueHandling = DefaultValueHandling.Ignore)]
public ArticleMeta Meta { get; set; }
}
public class ArticleMeta
{
[JsonProperty("yoast_wpseo_focuskw", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string YoastSeoFocusKeyword { get; set; }
[JsonProperty("yoast_wpseo_title", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string YoastSeoMetaTitle { get; set; }
[JsonProperty("yoast_wpseo_metadesc", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string YoastSeoMetaDescription { get; set; }
[JsonProperty("yoast_wpseo_metakeywords", DefaultValueHandling = DefaultValueHandling.Ignore)]
public string YoastSeoMetaKeywords { get; set; }
}
N’oubliez pas le using Newtonsoft.Json pour utiliser l’attribut JsonProperty.
J’ai mis 4 champs dans les meta
- Focus Keyword : c’est la requête cible de votre article utilisée par Yoast pour faire l’analyse SEO
- Meta title : comme son nom l’indique, c’est le champ titre meta
- Meta description : le champ meta description de votre article
- Meta keywords : les mots clés de votre article que vous souhaitez mettre dans le meta keywords
Voici la liste des champ meta qui devraient être supportés selon ce projet github (dont le développeur de l’extension s’est inspiré)
yoast_wpseo_focuskwyoast_wpseo_titleyoast_wpseo_metadescyoast_wpseo_linkdexyoast_wpseo_metakeywordsyoast_wpseo_meta-robots-noindexyoast_wpseo_meta-robots-nofollowyoast_wpseo_meta-robots-advyoast_wpseo_canonicalyoast_wpseo_redirectyoast_wpseo_opengraph-titleyoast_wpseo_opengraph-descriptionyoast_wpseo_opengraph-imageyoast_wpseo_twitter-titleyoast_wpseo_twitter-descriptionyoast_wpseo_twitter-image
L’appel à la méthode CreatePost change aussi :
var wpApiClient = new WordPressApiClient();
var post = await wpApiClient.CreatePost(new Article
{
Content = "<h3>Mon titre</h3><p>Mon premier paragraphe créé via l'API</p>",
Title = "Article créé via l'API",
Status = "draft",
Meta = new ArticleMeta
{
YoastSeoFocusKeyword = "Requête cible crée par l'API",
YoastSeoMetaTitle = "Meta Title crée par l'API",
YoastSeoMetaDescription = "Meta description crée par l'API"
}
});
Et voici la section Yoast SEO de l’article créé :



Hello,
Super tuto, mais il ne semble que ça ne fonctionne plus..
Sauriez-vous si les presenter yoast ont changé ?
Cdlt
Cela fonctionne toujours pour moi, avez-vous bien installé le plugin ?