Помогите мне понять, как боты Google находят ссылки на "идентификатор" продукта и как блокировать их без негативных последствий
Я периодически проверял инструменты Google для веб-мастеров и недавно заметил большое количество сообщений об ошибках 500 для ссылок на несуществующие страницы.
Пример:
http://www.mysite.com/eng/catalog/product/view/id/21826/s/URL_KEY/ RESPONSE CODE 500
ИДЕНТИФИКАТОР и URL-КЛЮЧ действительны сами по себе и правильно идентифицируют продукт. Продукт действительно существует, и если я изменю URL на:
http://www.mysite.com/eng/URL_KEY.html
Откроется страница. Использование идентификатора в бэкэнде также показывает правильный продукт.
Все ссылки на страницы продуктов во внешнем интерфейсе находятся в таком формате: http://www.mysite.com/eng/URL_KEY.html нет ссылки на какой-либо URL-адрес, который использует /каталог/продукт/просмотр/идентификатор/21826/s/URL_KEY/.
Как боты Google находят эти ссылки, если во внешнем интерфейсе нет ссылки?
Могу ли я безопасно запретить: /каталог/ в моем robots.txt чтобы избежать сообщения об ошибке в инструментах Google для веб-мастеров, не оказывая негативного влияния на мой сайт?
Спасибо!
2 answers
Быстрое простое решение состоит в том, чтобы настроить robots.txt
так, чтобы игнорировать родительский путь:
## Do not crawl seach pages and not-SEO optimized catalog links
Disallow: /catalogsearch/
Disallow: /catalog/product_compare/
Disallow: /catalog/category/view/
Disallow: /catalog/product/view/
Фрагмент из:
- http://turnkeye.com/blog/optimize-robots-txt-for-magento/
- Альтернативный обмен стеками на основе всего robots.txt файл также здесь: Magento дублирует мета-теги в Google webmaster
Чтобы ответить на ваш вопрос, как это сделать, поможет анализ указанного контроллера:
Файл: app/code/core/Mage/Catalog/controllers/ProductController.php
/**
* Product view action
*/
public function viewAction()
{
// Get initial data from request
$categoryId = (int) $this->getRequest()->getParam('category', false);
$productId = (int) $this->getRequest()->getParam('id');
$specifyOptions = $this->getRequest()->getParam('options');
// Prepare helper and params
$viewHelper = Mage::helper('catalog/product_view');
$params = new Varien_Object();
$params->setCategoryId($categoryId);
$params->setSpecifyOptions($specifyOptions);
// Render page
try {
$viewHelper->prepareAndRender($productId, $this, $params);
} catch (Exception $e) {
if ($e->getCode() == $viewHelper->ERR_NO_PRODUCT_LOADED) {
if (isset($_GET['store']) && !$this->getResponse()->isRedirect()) {
$this->_redirect('');
} elseif (!$this->getResponse()->isRedirect()) {
$this->_forward('noRoute');
}
} else {
Mage::logException($e);
$this->_forward('noRoute');
}
}
}
$specifyOptions
было бы значением, за которым нужно следовать во время запроса.
Скорее всего, URL-адрес находится по сгенерированной ссылке sitemap.xml
, в самом модуле SEO Sitemap catalog Magento Core есть /catalog/seo_sitemap/category/
или что-то в этом роде.
/s/ в вашем URL-адресе может означать, что виновником также может быть возможное альтернативное представление магазина.
Не уверен, на какой версии Magento вы находитесь. Если вы используете последнюю версию Magento CE или EE Я считаю, что последняя версия приводит к тому, что поколение Google sitemap sitemap.xml
возвращает истинный путь контроллера, такой как ваш, а не url_key
.
Для этого лучше использовать канонический тег, поэтому всякий раз, когда Google индексирует http://www.mysite.com/eng/catalog/product/view/id/21826/s/URL_KEY/
У него должен быть канонический тег в голове, например
<link rel="canonical" href="http://www.mysite.com/eng/URL_KEY.html"/>
Вы можете включить канонические теги в разделе System > Configuration > Catalog > Use Canonical Link Meta Tag For Products