谷歌站点地图问题 Contao 4.4.



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

vendor/contao/core-bundle/src/Resources/contao/classes/Backend.php
行号662 - 680

将"文章/"附加到带有预告片的文章。所以站点地图生成网址

  1. 附文章/

  2. 列表项

没有文章/

第一个是正确的网址。第二个 URL 生成 404。我如何解决问题?

我的站点配置如下

->创建了一个隐藏在导航中的常规页面,并创建了带有配置显示预告片的文章 ->创建了另一个页面,并创建了元素作为"预告文章",并从上面的页面中选择文章

所以你的网站结构是这样的?

  • 第 1 页包含多篇文章
  • 第 2 页 如果一篇文章包含"文章预告片"元素,则应将此页面从站点地图中排除

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

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

我解决了这个问题。 网址是从时事通讯包中重新生成的。在核心捆绑包中,生成带有预告片的文章的 URL。时事通讯包还包含用于创建可搜索页面数组的钩子。挂钩重新生成 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;
}

最新更新