Представления нескольких магазинов Magento с rel="альтернативный"
Я запускаю одну установку Magento 1.7 с 2 представлениями магазина. У меня есть два домена, которые оптимизированы для поисковых систем Ирландии и Великобритании. Поскольку контент очень похож, я хотел бы использовать rel="альтернативный" hreflang="XX":
<link rel="alternate" hreflang="en" href="http://domain.ie/" />
<link rel="alternate" hreflang="en-gb" href="http://domain.co.uk/" />
Есть ли простое решение/плагин, который позволит мне выбрать соотношение между этими двумя представлениями магазина для страницы продукта/категории/текста?
3 answers
В то время как теги привязки в Magento создаются по частям в шаблонах, нет центрального, простого способа сделать это. Извините. Единственный централизованный подход, о котором я могу думать, - это наблюдать за controller_front_send_response_before
и выполнять сложный preg_replace()
, чтобы переписать все теги привязки, но вам, вероятно, будет трудно поймать все ссылки.
Однако, по-видимому, лучшим подходом может быть использование карт сайтов, по крайней мере, в том, что касается Google: http://support.google.com/webmasters/bin/answer.py?hl=en&answer=2620865
Поскольку один веб-сайт хорошо работает в результатах поиска, а второй вообще не занимает места, вот что я понял:
- На текстовых страницах вы можете использовать XML обновления макета (те же канонические URL-адреса sa)
<reference name="head"><action method="addLinkRel"><rel>canonical</rel><href>http://www.yoururl.com/goes/here</href></action> </reference>
Я буду использовать одни и те же URL-адреса продуктов на обеих страницах и 301 старых записях
Действия по умолчанию (например, регистрация/оформление заказа) имеют один и тот же uri запроса, поэтому нет необходимости его изменять
Если товар недоступен во втором магазине Я перенаправлю (301) запрос на домашнюю страницу
По умолчанию в заголовке отображается rel="альтернатива" с переключенным адресом домена
Я создал это в прошлом. У меня больше нет кода, но вот идея и небольшой фрагмент кода, чтобы вы начали.
Вы можете наблюдать 'controller_action_layout_generate_blocks_ после'
<frontend>
<events>
<controller_action_layout_generate_blocks_after>
<observers>
<example_alternate>
<type>singleton</type>
<class>Example_Alternate_Model_Observer</class>
<method>createAlternateLinks</method>
</example_alternate>
</observers>
</controller_action_layout_generate_blocks_after>
</events>
</frontend>
Затем в вашем методе наблюдателя найдите соответствующую перезапись и добавьте ссылку на головной блок:
public function createAlternateLinks($observer) {
$headBlock = Mage::app()->getLayout()->getBlock('head');
$helper = Mage::helper('example');
if ($headBlock) {
foreach ($Mage::app()->getStores() as $store) {
//this will be your logic for fetching the urls, I suggest using the current urls or registry ('current_product','current_category') to get the product, category
//and then using rewrites finding the relevant url for other store view
$url = $helper->getAlternateUrl();
//this will be used for hreflang but feel free to omit it or simply use store locale
$area = Mage::helper('your_module')->getArea($store->getId());
// add the alternate link
$headBlock->addLinkRel('alternate"' . ' hreflang="' . $area, $url);
}
}
return $this;
}
Затем вы можете получить альтернативные URL-адреса, используя модель перезаписи URL-адресов. Например, для URL-адреса страницы продукта вы можете использовать этот
public function rewrittenProductUrl($productId, $storeId) {
$coreUrl = Mage::getModel('core/url_rewrite');
$idPath = sprintf('product/%d', $productId);
$coreUrl->setStoreId($storeId);
$coreUrl->loadByIdPath($idPath);
return $coreUrl->getRequestPath();
}
Так что на самом деле все, что у вас есть осталось сделать все вместе и создать логику для getAlternateUrl, используя реестр и перезапись URL.
Дайте мне знать, если что-то неясно и нуждается в разъяснении.