web-dev-qa-db-ja.com

記事は指定されたパスの外にも表示されます

最近、Joomla 3.6.5インストールの奇妙な動作に遭遇しました。 (SEFがオンの場合)IDが前にある記事は、URLから直接呼び出されると表示され、メニュー項目に配置されたパスをたどるだけでは表示されないことに気付きました。

たとえば、メニュー項目によると、正しいパスは次のようになります。

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

記事はメニュー項目の下に表示されます。そう

domain.com/219-article-title

または

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

記事の本文を返します。ただし、これらの場合、メニュー項目で設定されたタイトルは維持され、記事のテキストのみがレンダリングされます。興味深いことに、「もっと読む...」の後の部分のみ

SEFをオフにしたときの動作は、URLで記事のIDとタイトルを置き換えた場合と同じです。

この振る舞いはかなり奇妙です。 Googleクローラーがこれらのページのインデックスを作成するため、問題が発生します。マルチサイトインストールを実行すると、一方のサイトの一部の記事がもう一方のベストに表示されます(Google検索経由でアクセスできます)。これはかなり面倒です。

メニュー項目の設定に従ってのみ、それが発生して記事が表示されないようにする方法はありますか?

3
Michael

これは、Joomlaコンテンツルーターの問題です。具体的には、次のコードで:

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;
}

$article_id$segments配列の最後の部分の整数キャストであることがわかります。これは、[youjoomladomain] .com/blablabla/123-your-article.htmlのようなものを持つことができ、blablablaがどこにも存在しない(カテゴリまたはメニュー項目)。 123は既存の記事IDなので、[youjoomladomain] .com/blablabla/123-blablabla.htmlでも機能します(したがって、他のすべては無視されます)。これは、SEOの観点からは大きな問題です。スパマーは、複数のURLからWebサイト上の同じ記事にリンクすることができるためです(中間部分はわいせつな文字列になる可能性があります)。

この問題のクリーンな解決策は、説明されているようにsef_advanced_linkを使用することです heresef_advanced_linkオプションは、その大きな利点にもかかわらず、Joomlaでは十分に宣伝されていません(少なくとも、最後にチェックしたときは、バックエンドからのオプションではありません)(理由はまったくわかりません)。このオプションを使用すると、文字列内のIDが削除されるので、Joomlaは参照している記事を知るためにURL全体をチェックする必要があります。有効にすると、URLの中央にある「blablabla」は404を返します。

2
itoctopus