Дубли страниц в Yii
Дубли страниц в Yii
Подскажите пожалуйста как вы решаете вопрос с дублями в Yii?
Суть проблемы такова.
Переносится сайт, с Joomla, на Yii. ( желание клиента который ничего не понимает в программинге, но ему так подсказали друзья. )
Главное требования : 100% устранение дублей.
Казалось бы все просто, ведь в Yii есть роутер, и за счет него все можно сделать, но несмотря на то что я поработал на фрейме буквально неделю или там чуть больше, успел заметить страшную проблему как и у других фреймов или цмс-ок.
Роутер в Yii делает красивые ЧПУ ссылки, но не устраняет за собой дубли, таким образом дефольтный роутер нужно доработать.
Привожу простые примеры.
У нас есть простая страница с контактной формой : без ЧПУ ссылка такая : http://site.ru/index.php?r=site/contact
После того как включили ЧПУ ссылка становится : http://site.ru/index.php/site/contact
Но и за того что слово "site", тут просто лишнее нужно поработать роутером и сделать финальный красивый штрих, получив в итоге вот эту ссылку : http://site.ru/index.php/contact
Теперь вроде все ок, но это только с точки зрения программинга, а с точки зрения СЕО нет, таким образом чтобы окончательно сделать наш путь правильным нужно добавить суффикс для нашей ссылки , пусть это будет '.html', и в итоге у нас есть финальный путь: http://site.ru/index.php/contact.html
Все вроде готово. (Замечу что index.php не убирал просто и за того что-бы показать пример дефолтных настроек, и проблему с ним решить можно легко с htaccess, по этому тут он не играет большой роли).
Но тут как раз начинаются проблемы. Если почитать что пишет Google или Yandex, то мы можем сделать вывод что проблем у нас не будет, и все круто, так как поисковики утверждают что не будут индексировать те ссылки которые не прописаны на самом сайте. То есть нам остается прописать ссылку на контакты с суффиксом в конце и цель достигнута. Теоретически это так, но из практики, можно утверждать что за счет хороших, любимых конкурентов, эти ссылки легко попадают в индекс. Возникает вопрос а как так ? Ответ простой : например на Джумла, обращаемся к любому сайту который ищет расширения которые используются на сайте, и запускаем его каждый день, по три четыре раза, через неделю-две, в индексе выскакивают дубли. Также делается если прописывать ссылки на стороние сайты, по неверному пути. То есть кто-то пишет в комментах вот такой вот путь : http://site.ru/index.php/contact , ну конечно за счет нескольких хороших таких ссылок, быстро добиваемся дублей.
В общем надеюсь суть понятна, в детали не буду вникать.
Теперь сам вопрос : Как решить вопрос с дублями страниц в Yii, за счет роутера? Чтобы например простую ссылку : http://site.ru/index.php/contact в том случае если есть суффикс редиректило всегда на http://site.ru/index.php/contact.html ну и все остальные варианты редиректило на то правило что прописано в роутере.
Заранее спасибо!
Суть проблемы такова.
Переносится сайт, с Joomla, на Yii. ( желание клиента который ничего не понимает в программинге, но ему так подсказали друзья. )
Главное требования : 100% устранение дублей.
Казалось бы все просто, ведь в Yii есть роутер, и за счет него все можно сделать, но несмотря на то что я поработал на фрейме буквально неделю или там чуть больше, успел заметить страшную проблему как и у других фреймов или цмс-ок.
Роутер в Yii делает красивые ЧПУ ссылки, но не устраняет за собой дубли, таким образом дефольтный роутер нужно доработать.
Привожу простые примеры.
У нас есть простая страница с контактной формой : без ЧПУ ссылка такая : http://site.ru/index.php?r=site/contact
После того как включили ЧПУ ссылка становится : http://site.ru/index.php/site/contact
Но и за того что слово "site", тут просто лишнее нужно поработать роутером и сделать финальный красивый штрих, получив в итоге вот эту ссылку : http://site.ru/index.php/contact
Теперь вроде все ок, но это только с точки зрения программинга, а с точки зрения СЕО нет, таким образом чтобы окончательно сделать наш путь правильным нужно добавить суффикс для нашей ссылки , пусть это будет '.html', и в итоге у нас есть финальный путь: http://site.ru/index.php/contact.html
Все вроде готово. (Замечу что index.php не убирал просто и за того что-бы показать пример дефолтных настроек, и проблему с ним решить можно легко с htaccess, по этому тут он не играет большой роли).
Но тут как раз начинаются проблемы. Если почитать что пишет Google или Yandex, то мы можем сделать вывод что проблем у нас не будет, и все круто, так как поисковики утверждают что не будут индексировать те ссылки которые не прописаны на самом сайте. То есть нам остается прописать ссылку на контакты с суффиксом в конце и цель достигнута. Теоретически это так, но из практики, можно утверждать что за счет хороших, любимых конкурентов, эти ссылки легко попадают в индекс. Возникает вопрос а как так ? Ответ простой : например на Джумла, обращаемся к любому сайту который ищет расширения которые используются на сайте, и запускаем его каждый день, по три четыре раза, через неделю-две, в индексе выскакивают дубли. Также делается если прописывать ссылки на стороние сайты, по неверному пути. То есть кто-то пишет в комментах вот такой вот путь : http://site.ru/index.php/contact , ну конечно за счет нескольких хороших таких ссылок, быстро добиваемся дублей.
В общем надеюсь суть понятна, в детали не буду вникать.
Теперь сам вопрос : Как решить вопрос с дублями страниц в Yii, за счет роутера? Чтобы например простую ссылку : http://site.ru/index.php/contact в том случае если есть суффикс редиректило всегда на http://site.ru/index.php/contact.html ну и все остальные варианты редиректило на то правило что прописано в роутере.
Заранее спасибо!
Re: Дубли страниц в Yii
Спасибо за ссылку! Оказалось что этот момент разработчики предусмотрели. Но есть один баг: не работает роутинг для стартовых страниц модулей .Sam Dark писал(а):http://www.yiiframework.com/doc/api/1.1 ... ing-detail
Например есть модуль "users", и вот такой вот адрес работает когда значение для 'useStrictParsing'=>false : site.ru/users/ . Но выводит 404 страницу когда значение "true".
В роутере такое вот правило : '<module:\w+>'=>'<module>/controller/action/', Кажется не работает и за <module>.
Может и за этого параметра нужно что-то поменять?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Дубли страниц в Yii
Как минимум слэш лишний в правиле справа.'<module:\w+>'=>'<module>/controller/action/'
Нравится Yii? Давайте сделаем его лучше!.
Re: Дубли страниц в Yii
Удалил ... но ничего не изменилось.Sam Dark писал(а):Как минимум слэш лишний в правиле справа.'<module:\w+>'=>'<module>/controller/action/'
Пробовал разные варианты, никаких изменений.
Re: Дубли страниц в Yii
попробуйте protected/runtime/cache почистить, правила роутинга могут кешироваться.vovavovcic писал(а):Удалил ... но ничего не изменилось.
Пробовал разные варианты, никаких изменений.
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
Re: Дубли страниц в Yii
Папки cache у меня нету, но я почистил URI там было некоторые файлы, но все тоже самое.Koduc писал(а):попробуйте protected/runtime/cache почистить, правила роутинга могут кешироваться.vovavovcic писал(а):Удалил ... но ничего не изменилось.
Пробовал разные варианты, никаких изменений.
Кстати оказалось что даже главная не открывается.
Доступны только ссылки модулей с гет параметрами. Все остальное просто выдает 404.
Логи пишут вот такое :
Код: Выделить всё
2012/12/04 11:00:53 [error] [exception.CHttpException.404] exception 'CHttpException' with message 'Невозможно обработать запрос "".' in Y:\home\localhost\www\yii\protected\framework\web\CUrlManager.php:372
Stack trace:
#0 Y:\home\localhost\www\yii\protected\framework\web\CWebApplication.php(141): CUrlManager->parseUrl(Object(CHttpRequest))
#1 Y:\home\localhost\www\yii\protected\framework\base\CApplication.php(162): CWebApplication->processRequest()
#2 Y:\home\localhost\www\yii\index.php(13): CApplication->run()
#3 {main}
REQUEST_URI=/yii/
Re: Дубли страниц в Yii
Ну да. При включении опции нужно будет все пути в правилах прописывать.
Для главной добавьте правило
Для главной добавьте правило
Код: Выделить всё
''=>'site/index',
Re: Дубли страниц в Yii
Я просто в каждую модель добавил метод getUrl()
и везде использую запись $model->url для получения ссылки.
А дальше просто делаю проверку текущего адреса с редиректом на правильный:
Код: Выделить всё
class Post extends CActiveRecord
{
private $_url;
public function getUrl()
{
if ($this->_url === null)
$this->_url = Yii::app()->createUrl('post/show', array('id'=>$this->id));
return $this->_url;
}
}
А дальше просто делаю проверку текущего адреса с редиректом на правильный:
Код: Выделить всё
public function actionShow($id)
{
$model = $this->loadModel($id);
if (Yii::app()->request->requestUri != $model->url)
$this->redirect($model->url);
$this->render($view, array(
'model'=>$model,
));
}
Re: Дубли страниц в Yii
Спасибо большое! Все заработало.ElisDN писал(а):Ну да. При включении опции нужно будет все пути в правилах прописывать.
Для главной добавьте правилоКод: Выделить всё
''=>'site/index',
Но остался один нюанс :
Я использую рецепт Александра для формирования роутера для модулей : http://rmcreative.ru/blog/post/curlmanageraddrules
И вот возникает маленькая проблема : если я пишу правила для модуля в самом файле модуля ссылка не работает, если я его прописываю в самом конфиге, ссылка срабатывает, вот правило которое так себя ведет : '<module:users>'=>'<module>/controlle/action'. Это не критично, но хотелось бы решить до конца этот момент, так как много модулей будет, и так удобнее.
Еще раз всем спасибо!
Re: Дубли страниц в Yii
Чтобы использовать правила из другого модуля, их необходимо сначала добавить. Я для этого хэлпер себе сделал.
Re: Дубли страниц в Yii
Как избавиться от ссылок вроде http://example.ru/index.php?r=site/index ?
Они в любом случае остаются!
Они в любом случае остаются!
- Beaten_Sect0r
- Сообщения: 234
- Зарегистрирован: 2011.06.15, 14:58
- Откуда: Ярославль
- Контактная информация:
Re: Дубли страниц в Yii
хочется чтобы они дематериализовались еще к тому же )
Re: Дубли страниц в Yii
Чего нибудь нового появилось по этому вопросу? Или надо лезть в UrlManager самому?Tpona писал(а):Как избавиться от ссылок вроде http://example.ru/index.php?r=site/index ?
Они в любом случае остаются!
Re: Дубли страниц в Yii
link rel="canonical" прописать или ещё как-нибудь вроде http://www.elisdn.ru/blog/54/seo-elemen ... -frameworkrobotR13 писал(а):Чего нибудь нового появилось по этому вопросу? Или надо лезть в UrlManager самому?