301-й редирект с дублей страниц

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
vv-off
Сообщения: 53
Зарегистрирован: 2018.01.12, 11:49

301-й редирект с дублей страниц

Сообщение vv-off »

Здравствуйте.
СЕО Поставили задачу редиректить с дублей страниц, таких как
sait.ru/index.php/site/index
sait.ru?r=site/index
sait.ru/index.php/site

и т.д.
набросал решение, подскажите какие подводные камни могут быть:

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

public function beforeaction($action){

        $isUrlModified = false;
        $url = Yii::$app->request->absoluteUrl;
        $scriptUrl = Yii::$app->request->scriptUrl;

        if (strpos($url, 'index.php') !== false) {
            $url = str_replace($scriptUrl, '', $url);
            $isUrlModified = true;
        }

        if (strpos($url, Yii::$app->defaultRoute) != false) {
            $url = str_replace('/' . Yii::$app->defaultRoute, '', $url);
            $url = str_replace(Yii::$app->defaultRoute, '', $url);
            $isUrlModified = true;
        }

        if (strpos($url, Yii::$app->controller->defaultAction) !== false) {
            $url = str_replace('/' . Yii::$app->controller->defaultAction, '', $url);
            $url = str_replace(Yii::$app->controller->defaultAction, '', $url);
            $isUrlModified = true;
        }

        if ($isUrlModified) {
            $this->redirect($url, 301);
        }

        return true;
    }
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: 301-й редирект с дублей страниц

Сообщение unknownby »

vv-off писал(а): 2020.07.08, 16:07 Здравствуйте.
СЕО Поставили задачу редиректить с дублей страниц, таких как
sait.ru/index.php/site/index
sait.ru?r=site/index
sait.ru/index.php/site
А разве в urlManager не убираются некрасивые ссылки
Такого рода
sait.ru?r=site/index
sait.ru?r=site/about
На такие
sait.ru
sait.ru/about
vv-off
Сообщения: 53
Зарегистрирован: 2018.01.12, 11:49

Re: 301-й редирект с дублей страниц

Сообщение vv-off »

Дело в том, что они убираются, но страницы так же можно открыть по некрасивым если например ввести их в адресной строке браузера.
Отсюда дубли страниц, которые нужно редиректить или 404 отдавать.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: 301-й редирект с дублей страниц

Сообщение unknownby »

vv-off писал(а): 2020.07.08, 17:21 Дело в том, что они убираются, но страницы так же можно открыть по некрасивым если например ввести их в адресной строке браузера.
Отсюда дубли страниц, которые нужно редиректить или 404 отдавать.
Всё же с точки зрения SEO для начала стоило бы подправить sitemap.xml и robots.txt
Внутри робота можно запретить сканирование таких ссылок, а пользователь сам никогда не догадается, что у тебя есть такие ссылки, если ему поисковик не будет отдавать такие ссылки в поиске.
Ну а карта сайта подскажет поисковикам, какие ссылки нужно отсканировать

Ну и можно посмотреть про редиректы в htaccess.
vv-off
Сообщения: 53
Зарегистрирован: 2018.01.12, 11:49

Re: 301-й редирект с дублей страниц

Сообщение vv-off »

Это да, sitemap.xml и robots.txt обязательно нужны и есть.
Тут наверное имелось ввиду, что если где-то разместить ссылку вида sait.ru/index.php/site/index и по ней будет достаточно много переходов, то она все равно рано или поздно проиндексируется и будет дубль страницы.

Вообщем протестировал, всё работает.
В итоге получил вот такой код

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

public function beforeaction($action){

        $isUrlModified = false;
        $url = Yii::$app->request->absoluteUrl;
        $scriptUrl = Yii::$app->request->scriptUrl;

        if (strpos($url, 'index.php') !== false) {
            $url = str_replace($scriptUrl, '', $url);
            $isUrlModified = true;
        }

        if (strpos($url, '?r=') !== false) {
            $url = str_replace('?r=', '', $url);
            $isUrlModified = true;
        }

        if (strpos($url, Yii::$app->defaultRoute) != false && Yii::$app->defaultRoute == Yii::$app->controller->id) {
            $url = str_replace('/' . Yii::$app->defaultRoute, '', $url);
            $url = str_replace(Yii::$app->defaultRoute, '', $url);
            $isUrlModified = true;
        }

        if (strpos($url, Yii::$app->controller->defaultAction) !== false && Yii::$app->controller->defaultAction == Yii::$app->controller->action->id) {
            $url = str_replace('/' . Yii::$app->controller->defaultAction, '', $url);
            $url = str_replace(Yii::$app->controller->defaultAction, '', $url);
            $isUrlModified = true;
        }

        if ($isUrlModified) {
            $this->redirect($url, 301);
        }

        return parent::beforeAction($action);
    }
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: 301-й редирект с дублей страниц

Сообщение Dominus »

Возможно достаточно было бы этого:

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

//...
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'enableStrictParsing' => true, // включаем строгий анализ
    'rules' => [
        //...
    ]
],
//...
https://www.yiiframework.com/doc/api/2.0/yii-web-urlmanager#$enableStrictParsing-detail
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Ответить