web-dev-qa-db-fra.com

Coder sur un domaine dans les URLs canoniques de Yoast SEO

Pour diverses raisons, on m'a demandé de dupliquer un blog wordpress sur plusieurs sous-domaines. Évidemment, cela entraînera des problèmes de contenu en double, ce que j'espère atténuer avec l'utilisation d'une balise canonique, renvoyant à un seul sous-domaine (www).

J'utilise toutefois Yoast SEO sur le site. Cette auto génère la balise canonique - et semble utiliser le sous-domaine dans lequel je suis à ce moment-là. Je suppose que cela provient du paramètre WP_SITEURL ou d'un paramètre similaire, mais j'ai dû le modifier pour autoriser les multiples sous-domaines en premier lieu.

Puis-je forcer Yoast SEO à utiliser un seul sous-domaine pour toutes les URL canoniques? J'ai toujours besoin de tous les liens du site et de toutes les fonctionnalités générales pour utiliser les autres sous-domaines, quel que soit leur emplacement actuel, mais le nom canonique devrait toujours renvoyer à un seul sous-domaine.

Remarque: la redirection n'est pas une option.

Je pense que la meilleure façon de le faire est d'utiliser l'API Yoast SEO, mais je ne le connais pas bien. Je pense que je dois ajuster ce qui suit pour inclure le sous-domaine souhaité, mais je ne suis pas sûr de la syntaxe pour obtenir le reste de l'URL générée.

add_filter( 'wpseo_canonical', 'http://www.' );
1
Gary

Vous trouverez ci-dessous un petit plugin à l’aide duquel vous devriez pouvoir remplacer le domaine de l’URL canonique par un autre domaine.

<?php
/*
 * Plugin Name: WPSE WPSEO Canonical
 * Plugin URI: http://wordpress.stackexchange.com
 * Description: Changes canonical url domain.
 * Author: Sisir
 * Version: 1.0
 * Author URI: http://developerpage.net
 *
 **/

add_filter('wpseo_canonical', 'swpseo_canonical_domain_replace');
function swpseo_canonical_domain_replace($url){

    $domain = 'google.com'; // this can be loaded from option table if you want admin to set it.
    $parsed = parse_url(home_url());
    $current_site_domain = $parsed['Host'];
    return str_replace($current_site_domain, $domain, $url);

}

Remarque: code non testé. Faites-moi savoir si cela ne fonctionne pas.

3
Sisir