Google Sitemap问题Contao 4.4

时间:2018-03-16 07:27:07

标签: sitemap contao

我正在使用contao 4.4实例。我在谷歌站点地图生成中遇到了问题。 我有一个新闻通讯页面(页面类型=常规)。在那个页面中,我有一些通讯文章(有预告片)。当我生成站点地图时,这些文章的网址会生成两次。当我检查核心时,我发现了一个创建用于生成站点地图的页面数组的类

  

供应商/ contao /芯束/ SRC /资源/ contao /类/ Backend.php
  第662 - 680行。

附加'文章/'与预告片的文章。因此站点地图生成网址

  1. with articles /

  2. 列出项目

  3. 没有文章/

    第一个是正确的url.Second Url生成404.我如何解决这个问题?

    我的网站配置如下

    - >创建了一个隐藏在导航中的常规页面,并使用配置show teaser创建了文章   - >创建另一个页面并创建元素作为'预告文章'并从上页选择文章

2 个答案:

答案 0 :(得分:0)

那么您的网站结构是这样的吗?

  • 第1页有多篇文章
  • 第2页,其中一篇文章包含“文章预告片”元素,此页面应从网站地图中排除

这是对的吗?如果是,这可能是解决方案:

在“网站结构”中,您可以编辑第2页:向下滚动到“专家设置”,有一个选项“在站点地图中显示”,您可以选择“从不显示”。

答案 1 :(得分:0)

我解决了这个问题。 网址是从简报包中重新生成的。在核心包中,生成带有预告片的文章的网址。 newsletter-bundle还包含用于创建可搜索页面数组的钩子。钩子重新生成url。我在vendor / contao / newsletter-bundle / src / Resources / contao / classes / Newsletter.php中写了一个函数来检查数组是否包含任何重复的url。

修改函数getSearchablePages()(第889-897行 )

if($this->checkValidUrl($arrPages, $objItem, $strUrl)){
        $arrPages[] = sprintf($strUrl, ($objItem->alias ?: $objItem->id));
}

定义用于查找重复的新功能

public function checkValidUrl($arrPages, $objItem, $strUrl)
{
    $alias      = $objItem->alias ?: $objItem->id;
    $urlExplode = explode('%s', $strUrl);
    $articleUrl = $urlExplode[0] . 'articles';
    foreach ($arrPages as $arrPage) {
        $validarticleUrl = $articleUrl . '/' . $alias;
        if (strcasecmp($arrPage,$validarticleUrl) == 0) {
            return false;
        }
    }
    return true;
}