Magento Multistore Canonical Tag

时间:2015-02-06 08:48:14

标签: php magento canonical-link multistore

我收到了一个简短的问题。 Magento已经拥有了产品和类别的规范工具。

但这如何与多家商店合作?

示例:

我有3个域名。

http://domainname1.at
http://domainname2.de
http://domainname3.ch

所有内容都有相同的内容(德语)。

当我激活domainname3.ch的规范标签时 标签看起来像:

  

<link rel="canonical" href="http://dimainname3.ch" />

但我想要那个domainname2&amp; domainname3 canonicaltag指向唯一内容所在的domainname1!

THX!

1 个答案:

答案 0 :(得分:2)

  

Magento已经拥有产品和类别的规范工具......这对多家商店有何影响?

它目前没有开箱即用的功能,因此您需要使用扩展程序进行设置。有很多方法可以解决这个问题,但我这样做的方法是在添加链接时修改rel="canonical"链接。

在我的新版或修改后的扩展程序中,我会扩展Mage_Page_Block_Html_Head并覆盖方法addLinkRel()来执行以下操作:

class My_Page_Block_Html_Head extends Mage_Page_Block_Html_Head
{
    /**
     * Add Link element to HEAD entity
     * Overridden to support new canonical cross domain feature.
     *
     * @param string $rel forward link types
     * @param string $href URI for linked resource
     * @return Mage_Page_Block_Html_Head
     */
    public function addLinkRel($rel, $href)
    {
        if ($rel == 'canonical' && $ccd = Mage::getStoreConfig('design/head/canonical_cross_domain')) {
            $href = preg_replace('/(https?:\/\/)[^\/]+(\/.*)/', "$1$ccd$2", $href);
        }
        return parent::addLinkRel($rel, $href);
    }
}

为了使其按预期工作,我需要将值插入core_config_data数据库表。这可以手动完成,甚至更好,在我的扩展程序中,我可以在管理配置部分常规/设计/ HTML头中设置一个新字段。我不会在这里走过,因为它只是一个很好的触摸。要添加的值将是这样的:

INSERT INTO core_config_data
    (scope, scope_id, path, value)
VALUES
    ('stores', STORE_ID_FOR_DOMAIN2, 'design/head/canonical_cross_domain', 'domainname1.at'),
    ('stores', STORE_ID_FOR_DOMAIN3, 'design/head/canonical_cross_domain', 'domainname1.at');

现在,只要Magento正常添加标准rel="canonical"链接,它就会首先检查是否为当前商店视图配置了跨域,并用该域名替换当前域名。 / p>