форум общения русскоязычных пользователей CMS Текстпаттерн
Вы не зашли.
Здравствуйте. Есть сайт на txp с формируемым url типа site.ru/section/id/nazvanie-statiy
Яндекс подходит к индексации довольно забавно. То проиндексирует указанный адрес, а то может лишь до тире в названии статьи, то есть:
site.ru/section/id/nazvanie
Проблема в том, что при переходе по обоим адресам представлена одна и та же статья, как будто они обе существуют, а не выдается 404 ошибка при переходе по второму адресу.
Вопрос: можно ли как-то изменить это поведение таким образом, чтобы адрес был однозначным и зачем так вообще сделано?
Отредактированно activizator (17-12-2010 13:03:36)
Неактивен
activizator написал:
Здравствуйте. Есть сайт на txp с формируемым url типа site.ru/section/id/nazvamie-statiy
Яндекс подходит к индексации довольно забавно. То проиндексирует указанный адрес, а то может лишь до тире в названии статьи, то есть:
site.ru/section/id/nazvamie
Проблема в том, что при переходе по обоим адресам представлена одна и та же статья, как будто они обе существуют, а не выдается 404 ошибка при перехлде по второму адресу.
Вопрос: можно ли как-то изменить это поведение таким образом, чтобы адрес был однозначным и зачем так вообще сделано?
Отвечу с конца - txp парсит урл и выдирает оттуда id статьи - все, что после слеша им не учитывается.
Как исправить? Использовать rel="canonical" - http://devaka.ru/articles/link-rel-canonical - может Яндекс вслед за Гуглом начнет поддерживать этот урл. Ну и плюс к этому использовать карту сайта sitemap.xml - по идее поисковик должен брать урлы оттуда, если будет идти конкуренция дублей.
Неактивен
И багрепорт Яндексу написать, кстати. А пример покажите?
Отредактированно glebotr (17-12-2010 10:41:57)
Неактивен
Привожу пример:
Есть страница "Страхование имущества граждан" на сайте domvmo.ru:
http://www.domvmo.ru/vip/2195/strakhova … a-grazhdan
Под таким адресом она проходит на сайте:
И в sitemap:
Яндекс карту видит нормально:
Но тем не менее индексирует:
Неактивен
Таким образом, откуда у него берется эта дурость с изменением адресов я не знаю, но это не единичный случай. К сожалению про rel="canonical" не думал, да и не обрабатывает его Яндекс. А вот сайтмэп есть и используется. Жду еще мнений. В яндекс напишу.
Неактивен
rel="canonical" добавил:
<txp:if_individual_article> <link rel="canonical" href="<txp:permlink />" /> </txp:if_individual_article>
Неактивен
activizator написал:
rel="canonical" добавил:
Код:
<txp:if_individual_article> <link rel="canonical" href="<txp:permlink />" /> </txp:if_individual_article>
Правильный подход
Еще можно попробовать сравнивать url и если он отличается от правильного полного урла, то делать 301-й редирект
Неактивен
Спасибо за подсказку. Сделал и 301-ый редирект. Вот код для моего случая:
<txp:if_individual_article> <txp:php> function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } $ThisPageURL = curPageURL(); $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; $ThisPagePermlink = $pageURL.$GLOBALS['prefs']['siteurl'].'/'.$GLOBALS['thisarticle']['section'].'/'.$GLOBALS['thisarticle']['thisid'].'/'.$GLOBALS['thisarticle']['url_title']; if ($ThisPagePermlink != $ThisPageURL) { header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$ThisPagePermlink); exit(); } </txp:php> </txp:if_individual_article>
К сожалению, ['thisarticle']['permlink'] отказался работать, а то было бы вообще просто.
Посмотреть результат можно на любой странице domvmo.ru, стерев часть из адреса и перезагрузив страницу.
Неактивен
Забыл заметить, код надо вставлять сразу после <body>
Неактивен
А заодно и .htaccess подправил, чтобы domvmo.ru редиректился на www.domvmo.ru . Теперь буду смотреть.
Всем спасибо за подсказки.
Неактивен
activizator написал:
Забыл заметить, код надо вставлять сразу после <body>
header в первую очередь всегда...
Неактивен
А вот и более правильное и универсальное решение permlink:
$ThisPagePermlink = permlink();
Вместо:
$ThisPagePermlink = $pageURL.$GLOBALS['prefs']['siteurl'].'/'.$GLOBALS['thisarticle']['section'].'/'.$GLOBALS['thisarticle']['thisid'].'/'.$GLOBALS['thisarticle']['url_title'];
Неактивен
И вся конструкция приобретает вид:
<body> <txp:if_individual_article> <txp:php> function curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; } return $pageURL; } $ThisPageURL = curPageURL(); $ThisPagePermlink = permlink(); if ($ThisPagePermlink != $ThisPageURL) { header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$ThisPagePermlink); exit(); } </txp:php> </txp:if_individual_article>
Красиво. Лаконично. Универсально. :-)
Неактивен
И еще вопрос, как сообщить поисковику, что срок действия публикации закончился? Видимо надо что-то в meta прописать? А то он в панели вебмастера выдает ошибки на ненайденные страницы, а у них уже просто срок действия прошел... И надо ли это вообще делать?
Неактивен
Пришел ответ из Яндекса по вопросу индексации. Ничего нового. Публикую:
Наш робот не обрезает страницы, а находит на них ссылки именно в таком виде. Робот переходит по ним и индексирует страницы, так как они доступны на Вашем сайте (отдают код 200). В данном случае рекомендую Вам запретить индексирование не нужных Вам страниц в файле robots.txt или обратиться к системному администратору с просьбой настроить сервер таким образом, чтобы при обращении к несуществующим страницам Вашего сайта отдавалась ошибка 404.
Неактивен