Дубли страниц в Yii

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Дубли страниц в Yii

Сообщение vova07 »

Подскажите пожалуйста как вы решаете вопрос с дублями в 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 ну и все остальные варианты редиректило на то правило что прописано в роутере.

Заранее спасибо!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Дубли страниц в Yii

Сообщение samdark »

Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Дубли страниц в Yii

Сообщение vova07 »

Спасибо за ссылку! Оказалось что этот момент разработчики предусмотрели. Но есть один баг: не работает роутинг для стартовых страниц модулей .

Например есть модуль "users", и вот такой вот адрес работает когда значение для 'useStrictParsing'=>false : site.ru/users/ . Но выводит 404 страницу когда значение "true".
В роутере такое вот правило : '<module:\w+>'=>'<module>/controller/action/', Кажется не работает и за <module>.
Может и за этого параметра нужно что-то поменять?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Дубли страниц в Yii

Сообщение samdark »

'<module:\w+>'=>'<module>/controller/action/'
Как минимум слэш лишний в правиле справа.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Дубли страниц в Yii

Сообщение vova07 »

Sam Dark писал(а):
'<module:\w+>'=>'<module>/controller/action/'
Как минимум слэш лишний в правиле справа.
Удалил ... но ничего не изменилось.
Пробовал разные варианты, никаких изменений.
Аватара пользователя
Koduc
Сообщения: 140
Зарегистрирован: 2011.02.15, 18:56

Re: Дубли страниц в Yii

Сообщение Koduc »

vovavovcic писал(а):Удалил ... но ничего не изменилось.
Пробовал разные варианты, никаких изменений.
попробуйте protected/runtime/cache почистить, правила роутинга могут кешироваться.
Разработка на Yii: monoray.ru
Открытое бесплатное решение для создания сайтов по аренде/продаже недвижимости: Open Real Estate
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Дубли страниц в Yii

Сообщение vova07 »

Koduc писал(а):
vovavovcic писал(а):Удалил ... но ничего не изменилось.
Пробовал разные варианты, никаких изменений.
попробуйте protected/runtime/cache почистить, правила роутинга могут кешироваться.
Папки cache у меня нету, но я почистил URI там было некоторые файлы, но все тоже самое.
Кстати оказалось что даже главная не открывается.
Доступны только ссылки модулей с гет параметрами. Все остальное просто выдает 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/
 
У других та же ошибка чисто другой реквест.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Дубли страниц в Yii

Сообщение ElisDN »

Ну да. При включении опции нужно будет все пути в правилах прописывать.

Для главной добавьте правило

Код: Выделить всё

''=>'site/index',
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Дубли страниц в Yii

Сообщение ElisDN »

Я просто в каждую модель добавил метод getUrl()

Код: Выделить всё

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;
    }
}
и везде использую запись $model->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,
    ));
}
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Дубли страниц в Yii

Сообщение vova07 »

ElisDN писал(а):Ну да. При включении опции нужно будет все пути в правилах прописывать.

Для главной добавьте правило

Код: Выделить всё

''=>'site/index',
Спасибо большое! Все заработало.
Но остался один нюанс :
Я использую рецепт Александра для формирования роутера для модулей : http://rmcreative.ru/blog/post/curlmanageraddrules

И вот возникает маленькая проблема : если я пишу правила для модуля в самом файле модуля ссылка не работает, если я его прописываю в самом конфиге, ссылка срабатывает, вот правило которое так себя ведет : '<module:users>'=>'<module>/controlle/action'. Это не критично, но хотелось бы решить до конца этот момент, так как много модулей будет, и так удобнее.

Еще раз всем спасибо!
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Дубли страниц в Yii

Сообщение ElisDN »

Чтобы использовать правила из другого модуля, их необходимо сначала добавить. Я для этого хэлпер себе сделал.
Tpona
Сообщения: 222
Зарегистрирован: 2011.06.05, 19:00

Re: Дубли страниц в Yii

Сообщение Tpona »

Как избавиться от ссылок вроде http://example.ru/index.php?r=site/index ?
Они в любом случае остаются!
Аватара пользователя
Beaten_Sect0r
Сообщения: 234
Зарегистрирован: 2011.06.15, 14:58
Откуда: Ярославль
Контактная информация:

Re: Дубли страниц в Yii

Сообщение Beaten_Sect0r »

Disallow: /index.php*
_https://coru.ws
Tpona
Сообщения: 222
Зарегистрирован: 2011.06.05, 19:00

Re: Дубли страниц в Yii

Сообщение Tpona »

хочется чтобы они дематериализовались еще к тому же )
robotR13
Сообщения: 21
Зарегистрирован: 2012.12.12, 20:33

Re: Дубли страниц в Yii

Сообщение robotR13 »

Tpona писал(а):Как избавиться от ссылок вроде http://example.ru/index.php?r=site/index ?
Они в любом случае остаются!
Чего нибудь нового появилось по этому вопросу? Или надо лезть в UrlManager самому?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Дубли страниц в Yii

Сообщение ElisDN »

robotR13 писал(а):Чего нибудь нового появилось по этому вопросу? Или надо лезть в UrlManager самому?
link rel="canonical" прописать или ещё как-нибудь вроде http://www.elisdn.ru/blog/54/seo-elemen ... -framework
Ответить