web-dev-qa-db-fra.com

L'article apparaît même en dehors du chemin donné

J'ai récemment rencontré un comportement étrange de mon installation Joomla 3.6.5. J'ai remarqué que (avec SEF activé), tout article précédé de son ID est affiché s'il est appelé directement par son URL, et pas seulement en suivant le chemin indiqué dans l'élément de menu.

Par exemple, si, conformément à l'élément de menu, le chemin correct serait:

domain.com/menu-item1/submenu-item/219-article-title

l'article apparaît sous n'importe quel élément de menu et même sans. Alors

domain.com/219-article-title

ou

domain.com/menu-item2/219-article-title

retourne le corps de l'article. Dans ces cas, toutefois, le titre défini via l'élément de menu est conservé, seul le texte de l'article est rendu. Chose intéressante, seule la partie après le 'en savoir plus…'

Lorsque je désactive SEF, le comportement est le même lorsque je remplace l'ID de l'article par un titre dans l'URL.

Je trouve ce comportement plutôt étrange. Cela me cause quelques ennuis, car le robot d'indexation de Google indexe ces pages. Lorsque je lance une installation multi-site, certains articles d’un site apparaissent dans le gilet de l’autre (et sont accessibles via la recherche Google), ce qui est plutôt gênant.

Existe-t-il un moyen d'éviter que cela ne se produise et d'afficher les articles uniquement en fonction du paramètre défini dans l'élément de menu?

3
Michael

Ceci est un problème avec le routeur de contenu Joomla. Plus précisément, dans le code suivant:

if (!$advanced)
{
    $cat_id = (int) $segments[0];

    $article_id = (int) $segments[$count - 1];

    if ($article_id > 0)
    {
        $vars['view'] = 'article';
        $vars['catid'] = $cat_id;
        $vars['id'] = $article_id;
    }
    else
    {
        $vars['view'] = 'category';
        $vars['id'] = $cat_id;
    }

    return $vars;
}

Vous pouvez voir comment le $article_id est un casting entier de la dernière partie du $segments tableau. Cela signifie que vous pouvez avoir quelque chose comme: [youjoomladomain] .com/blablabla/123-your-article.html, et le lien fonctionnera toujours, même si blablabla n’existe même nulle part (même en tant que catégorie ou un élément de menu). Même [youjoomladomain] .com/blablabla/123-blablabla.html fonctionnera, car 123 est un ID d'article existant (le reste est donc ignoré). C'est un gros problème du point de vue du référencement, car un spammeur peut simplement créer un lien vers le même article sur votre site Web à partir de plusieurs URL (où la partie centrale peut être une chaîne obscène).

La solution propre à ce problème consiste à utiliser le sef_advanced_link comme décrit ici . Le sef_advanced_link L'option _ n'est pas bien mise en avant dans Joomla (ce n'est même pas une option depuis le serveur - du moins la dernière fois que j'ai vérifié), malgré ses énormes avantages (je ne sais vraiment pas pourquoi). En utilisant cette option, vous vous débarrasserez de l'ID de la chaîne. Joomla est donc obligé de vérifier l'intégralité de l'URL afin de savoir à quel article vous faites référence. Une fois activé, tout "blablabla" au milieu de l'URL renverra un 404.

2
itoctopus