Joomla升级到3.4.x之后的link rel canonical处理方案

link rel canonical

把几个Joomla站点的程序从3.3.6升级到3.4.3之后,发现之前能正常显示的<link href=“” rel="canonical"/>都不在了。查看了/plugins/system/sef/sef.php之后,发现在网页头部加入canonical的条件变成了:

if ($uri->toString() !== $link)

也就是说当访问的链接是一个不规范链接时候,Joomla 3.4.x才会在页面源代码中插入<link rel="canonical" href...当然,这样的设计没有什么问题,但是实际测试结果却是——然并卵。

比如本篇的规范链接应该是:

http://www.onepx.com/joomla-34x-link-rel-canonical.html

如果不做修改,在网页源文件中是看不到link canonical的。我在这个链接后面加点东西,如:

http://www.onepx.com/joomla-34x-link-rel-canonical.html?ranbingluan

页面照常打开,这个时候查看页面源代码会发现头部多了一行:

<link href="http://www.onepx.com/joomla-34x-link-rel-canonical.html?ranbingluan=" rel="canonical"/>

不显示canonical就算了,也别显示错误的链接来误导搜索引擎啊。下面是我的处理方案,找到/plugins/system/sef/sef.php,注释或者删除下面几行:

if ($uri->toString() !== $link)
{
$doc->addHeadLink(htmlspecialchars($link), 'canonical');
}

因为我有使用sh404sef这个组件,也发现页面源代码头部中的<base href=“”/>一直都“非常正确”的显示着规范链接,所以我决定做一个小小的修改。找到/libraries/joomla/document/html/renderer/head.php,里面有关于在头部中插入<base href=“”/>的部分,大致如下:

// Generate base tag (need to happen early)
$base = $document->getBase();

if (!empty($base))
{
    $buffer .= $tab . '<base href="' . $document->getBase() . '" />' . $lnEnd;
}

在$buffer下面再添加一行:

$buffer .= $tab . '<link rel="canonical" href="' . $document->getBase() . '" />' . $lnEnd;

好了,现在再来看看本页的网页源文件,<link rel="canonical" 是不是乖乖的呆在<base href=“”的下面?

Joomla

Email: i at onepx dot com || QQ: ⑧九零三④幺 || 微信: onepxcom
©2023 一像素 蜀ICP备13026576号-2 网站地图