web-dev-qa-db-fra.com

Comment réparer les Itemid vides comme https://www.joomla.org/?Itemid=

Google a indexé une URL sur mon site comme ceci: https://www.joomla.org/ ? Itemid =

Cela se traduit par étrange page bien sûr. Essayez-le avec votre propre site!

Quelle serait la meilleure façon de rediriger cela vers l'élément de menu par défaut de Joomla?

Parce que Joomla Redirect Manager n'a pas fonctionné et un 301 dans le htaccess non plus ...

Ma solution est la suivante:

// Joomla System Trigger
public function onAfterRoute()
{
    // some basic checks
    if ($this->app->isSite() === false) return; 

    $app = JFactory::getApplication();
    $Itemid   = $app->input->getInt('Itemid');      

    // if an Itemid exists return
    if ($Itemid) return true;

    // get the default menu item id
    $menu = JFactory::getApplication()->getMenu();
    $menu_default = $menu->getDefault();
    $menu_default_id = $menu_default->id;

    // route it
    $link = 'index.php?Itemid=' . $menu_default_id;
    $link = JRoute::_($link);       

    // redirect to it
    $app->redirect($link, 'We had an empty Itemid.');
}   

Mais cela pourrait-il/devrait-il être géré différemment?

Les autres méthodes que j'ai essayées étaient les suivantes:

.htaccess

Redirect 301 /?Itemid= https://www.joomla.org/

Et via le gestionnaire de redirection:

Redirect Manager

Le <jdoc:include type="component" /> est vide (bien sûr). C'est ce que je voulais dire par étrange. C'est pourquoi je veux qu'il redirige vers l'élément de menu par défaut.

Btw. Google a indexé la page (uniquement) avec les liens Google. par exemple. Google Nieuws

Voir l'image . Google Nieuws

Ce n'est pas dans mon plan du site, pas n'importe où dans le code/la base de données. Screaming Frog SEO l'a complètement guidé.

Mais ok, j'ai demandé à Google de supprimer l'URL. Nous verrons.

1

Oui, je reçois tous les moteurs de recherche qui explorent des URL qui n’ont jamais existé sur le site. Cela arrive souvent, généralement parce qu'ils ont cette URL qui leur est remise par un site aléatoire sur le Web. Vous ne pouvez pas contrôler cela, et aucun des moteurs de recherche ne s'en soucie beaucoup, c'est donc une bataille perdue.

Certaines extensions SEF, telles que sh404SEF, peuvent gérer cette URL comme un alias pour une page légitime, donc si cela vous dérange, cela peut être une approche.

Vous devriez pouvoir utiliser .htaccess, mais je n'utiliserais pas la syntaxe que vous avez publiée comme exemple de ce que vous avez essayé. La redirection d'Apache a tendance à adopter une approche gourmande, de sorte que cet exemple redirigerait également, par exemple, ?Itemid=101 aussi bien que ?Itemid=.

Un meilleur modèle serait comme:

RedirectMatch "(.*)\?Itemid=$" "/whereever"

Il redirigera toutes les URL qui se terminent par cela, et mod_rewrite pourrait même être mieux. Mais, comme pour tous les essais .htaccess, cela dépend de la configuration du serveur autorisant ces directives.

Ma tentation pourrait être de considérer cela comme une "attaque", et 403 plutôt que de la rediriger. Ce ne serait pas la première fois que des gens mal intentionnés alimentent leurs liens vers les moteurs de recherche pour leur permettre de localiser de nouvelles proies.

0
Arlen

J'ai pu recréer le problème sur plusieurs de mes sites et je pense que vous devriez signaler le problème en tant que bogue à l'équipe Joomla pour résoudre plutôt que d'essayer de créer votre propre solution.

Je ne prétends pas comprendre les détails de ce qui se passe ici mais le code dans ../libraries/src/Router/ passe beaucoup d'efforts pour encoder, décoder et valider les URI donc je pense que quelqu'un qui le comprend pourrait/devrait créer une règle ou cocher pour gérer un Itemid = vide sur une URL entrante ou sortante.

À moins que vous puissiez identifier le code créant le Itemid vide = que Google indexe, je pense que ce serait la meilleure façon de résoudre le problème pour tout le monde.

0
Irata