Я немного искал, но не нашел ничего полезного, поэтому я в итоге нашел это решение
1-й, я создаю наблюдатель, прогон после сохранения категории,
Приложение / код / местные / пространство имен / модуль / и т.д. / config.xml
<events>
<catalog_category_save_commit_after>
<observers>
<namespace_module_Model_observer>
<type>singleton</type>
<class>namespace_module/observer</class>
<method>setUrlRedirect</method>
</namespace_module_Model_observer>
</observers>
</catalog_category_save_commit_after>
</events>
затем в моем обозревателе я добавляю пользовательское переписывание URL, которое делает URL нашей категории непосредственно доступным (example.com/deeply-layered-catogry.html)
public function setUrlRedirect($observer) {
$e = $observer->getEvent();
$c = $e->getCategory();
// getting updated data,
$data = $observer->getDataObject()->getData();
$c = Mage::getModel("catalog/category")->load($c->getId());
$url = $c->getUrl();
$handle = $data['url_key'];
$p = 'catalog/category/view/id/' . $c->getId(); /*$handle . ".html";*/
$id = 'seo-frindly/cat-' . $c->getId() .'.html';
$urlMdoule = Mage::getModel('core/url_rewrite');
$storeId = Mage::app()->getStore()->getStoreId();
if ( $urlMdoule->loadByIdPath($id)->getId() ) {
// update
$o = $urlMdoule->loadByIdPath($id);
$o->setIsSystem(0)
->setStoreId($storeId)
->setOptions('no')
->setTargetPath( $p )// Put the actual path
->setRequestPath( $handle .'.html')
->setRedirect(false)
->save();
} else {
// new
$urlMdoule->setIsSystem(0)
->setStoreId($storeId)
->setOptions('no')
->setIdPath($id)
->setTargetPath( $p )// Put the actual path
->setRequestPath( $handle .'.html')
->setRedirect(false)
->save();
}
return;
}
теперь, когда вы сохраняете категорию, она будет доступна по короткому URL,
просто добавьте атрибут rel = "canonical" в голову, чтобы Google проиндексировал короткие SEO-ссылки