Hello, I noticed there was a problem with the page titles and canonical urls for multi-level categories pages, for example if I have a category like this:
ebook/fiction/general
Magento 1.5.1.0 puts a wrong canonical url like this:
http://example.com/ebook
while it should be:
http://example.com/ebook/fiction/general
So we need a patch to fix this behavior and I will show you below. In the same time I needed to put a page title for category which hasn’t a default one.
If you haven’t write a page title for every category you have, Magento simply places the default store title, but i think this is wrong, because you know SEO is important, and page title is the most important thing on a website.
So I add a correct page title for categories without it by patching the same file for the fix above and you will have a page title with every category level names like this:
<title>Ebook - Fiction - General</title>
that’s much better then the default store title.
How to get all of this? Very simple, just place this code in “app/code/local/Mage/Catalog/Block/Category/View.php” so you will override the default one without touching the core file, and you are done (the function touched is only the _prepareLayout):
<?php /** * Magento * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade Magento to newer * versions in the future. If you wish to customize Magento for your * needs please refer to http://www.magentocommerce.com for more information. * * @category Mage * @package Mage_Catalog * @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com) * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) */ /** * Category View block * * @category Mage * @package Mage_Catalog * @author Magento Core Team <[email protected]> */ class Mage_Catalog_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); } // SBF get categories name as page title if (!$title ) { $title = $category->getName(); $it = 5; //Amount of iterations before script gives up if ($category) { while($category->getLevel() != 2 &amp;&amp; $it > 0) { $category = $category->getParentCategory(); $title = $category->getName().' - '.$title; if (!($category instanceof Mage_Catalog_Model_Category)) { break; } } } $headBlock->setTitle($title); }; if ($description = $category->getMetaDescription()) { $headBlock->setDescription($description); } if ($keywords = $category->getMetaKeywords()) { $headBlock->setKeywords($keywords); } if ($this->helper('catalog/category')->canUseCanonicalTag()) { // SBF $headBlock->addLinkRel('canonical', $this->getCurrentCategory()->getUrl()); } /* want to show rss feed in the url */ if ($this->IsRssCatalogEnable() &amp;&amp; $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 &amp;&amp; $state->getFilters()) { $res = false; } } } return $res; } }