1

クライアント向けに開発しているサイトで、SEO に関するフィードバックがありました。

基本的に、サイトは http ページと https ページの両方にインデックスを付けています。

バックエンドで Canonical タグを有効にしました。重複を取り除くには、https ページを参照する Canonical タグを削除し、対応する http Canonical タグに置き換えることをお勧めします。

これは Magento の組み込み機能ですか、それとも独自のモジュールを作成し、ページ リクエスト タイプを確認して、そのようにタグを挿入する必要がありますか?

4

2 に答える 2

1

Mage_Catalog_Block_category_Viewを拡張したばかりなので、必要なのは_prepareLayout関数だけでした。私のコードは下にあります

protected function _prepareLayout()
{
parent::_prepareLayout();

$this->getLayout()->createBlock('catalog/breadcrumbs');

if ($headBlock = $this->getLayout()->getBlock('head')) {
  $category = $this->getCurrentCategory();
  if ($title = $category->getMetaTitle()) {
    $headBlock->setTitle($title);
  }
  if ($description = $category->getMetaDescription()) {
    $headBlock->setDescription($description);
  }
  if ($keywords = $category->getMetaKeywords()) {
    $headBlock->setKeywords($keywords);
  }
  if ($this->helper('catalog/category')->canUseCanonicalTag()) {
    if(isset($_SERVER['HTTPS'])) {
      $pattern        = '/((ht){1}(tps://))/';
      $replacement    = 'http://';
      preg_replace($pattern, $replacement, $category->getUrl());
      $headBlock->addLinkRel('canonical', $category->getUrl());
    } else {
      $headBlock->addLinkRel('canonical', $category->getUrl());
    }
  }
  /*
  want to show rss feed in the url
  */
  if ($this->IsRssCatalogEnable() && $this->IsTopCategory()) {
      $title = $this->helper('rss')->__('%s RSS Feed',$this->getCurrentCategory()->getName());
      $headBlock->addItem('rss', $this->getRssLink(), 'title="'.$title.'"');
  }
}

return $this;
}
于 2012-11-07T11:06:51.773 に答える
0

デフォルトでは、ブラウザのアドレスバーは https ですが、Canonical タグは http のままである必要があります。

これをテストするには、ブラウザーのアドレス バーに https と http の両方のバージョンを入力し、各バージョンのページ ソースを表示して、ヘッダー セクションで正規タグ (href 値) を検索します。https ではなく同じである必要があります。

問題がある場合は、使用している magento のバージョンをお知らせください。

ブロックを拡張するには

<?xml version="1.0"?>
<config>
    <modules>
        <RWS_ProductCanonical>
            <version>0.1.0</version>
        </RWS_ProductCanonical>
    </modules>

    <global>
        <blocks>
            <productcanonical>
                <class>RWS_ProductCanonical_Block</class>
            </productcanonical>
            <catalog>
                <rewrite>
                    <category_view>RWS_ProductCanonical_Block_Category_View</category_view>
                </rewrite>
            </catalog>
        </blocks> 
        <helpers>
            <productcanonical>
                <class>RWS_ProductCanonical_Helper</class>
            </productcanonical>
        </helpers>
    </global>
</config>

ブロック app/code/local/RWS/ProductCanonical/Block/Category/View.php を作成します (Mage_Core_Block_Template を拡張し、すべてのコードをコピーします。これは、Mage_Catalog_Block_Category_View を拡張するときに、複数のタグがヘッダーに追加されるためです)

class RWS_ProductCanonical_Block_Category_View extends Mage_Core_Block_Template
{
    protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $this->getLayout()->createBlock('catalog/breadcrumbs');

        if ($headBlock = $this->getLayout()->getBlock('head')) {
            $category = $this->getCurrentCategory();
            if ($title = $category->getMetaTitle()) {
                $headBlock->setTitle($title);
            }
            if ($description = $category->getMetaDescription()) {
                $headBlock->setDescription($description);
            }
            if ($keywords = $category->getMetaKeywords()) {
                $headBlock->setKeywords($keywords);
            }
            if ($this->helper('catalog/category')->canUseCanonicalTag()) {
                ////// add to header here
                $headBlock->addLinkRel('canonical', $category->getUrl() . '?limit=all');
            }
            /*
            want to show rss feed in the url
            */
            if ($this->IsRssCatalogEnable() && $this->IsTopCategory()) {
                $title = $this->helper('rss')->__('%s RSS Feed',$this->getCurrentCategory()->getName());
                $headBlock->addItem('rss', $this->getRssLink(), 'title="'.$title.'"');
            }
        }

        return $this;
    }

    public function IsRssCatalogEnable()
    {
        return Mage::getStoreConfig('rss/catalog/category');
    }

    public function IsTopCategory()
    {
        return $this->getCurrentCategory()->getLevel()==2;
    }

    public function getRssLink()
    {
        return Mage::getUrl('rss/catalog/category',array('cid' => $this->getCurrentCategory()->getId(), 'store_id' => Mage::app()->getStore()->getId()));
    }

    public function getProductListHtml()
    {
        return $this->getChildHtml('product_list');
    }

    /**
     * Retrieve current category model object
     *
     * @return Mage_Catalog_Model_Category
     */
    public function getCurrentCategory()
    {
        if (!$this->hasData('current_category')) {
            $this->setData('current_category', Mage::registry('current_category'));
        }
        return $this->getData('current_category');
    }

    public function getCmsBlockHtml()
    {
        if (!$this->getData('cms_block_html')) {
            $html = $this->getLayout()->createBlock('cms/block')
                ->setBlockId($this->getCurrentCategory()->getLandingPage())
                ->toHtml();
            $this->setData('cms_block_html', $html);
        }
        return $this->getData('cms_block_html');
    }

    /**
     * Check if category display mode is "Products Only"
     * @return bool
     */
    public function isProductMode()
    {
        return $this->getCurrentCategory()->getDisplayMode()==Mage_Catalog_Model_Category::DM_PRODUCT;
    }

    /**
     * Check if category display mode is "Static Block and Products"
     * @return bool
     */
    public function isMixedMode()
    {
        return $this->getCurrentCategory()->getDisplayMode()==Mage_Catalog_Model_Category::DM_MIXED;
    }

    /**
     * Check if category display mode is "Static Block Only"
     * For anchor category with applied filter Static Block Only mode not allowed
     *
     * @return bool
     */
    public function isContentMode()
    {
        $category = $this->getCurrentCategory();
        $res = false;
        if ($category->getDisplayMode()==Mage_Catalog_Model_Category::DM_PAGE) {
            $res = true;
            if ($category->getIsAnchor()) {
                $state = Mage::getSingleton('catalog/layer')->getState();
                if ($state && $state->getFilters()) {
                    $res = false;
                }
            }
        }
        return $res;
    }
}
于 2012-10-25T11:48:10.523 に答える