Страница 1 из 1

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

Добавлено: 2020.07.08, 16:07
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;
    }

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

Добавлено: 2020.07.08, 17:15
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

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

Добавлено: 2020.07.08, 17:21
vv-off
Дело в том, что они убираются, но страницы так же можно открыть по некрасивым если например ввести их в адресной строке браузера.
Отсюда дубли страниц, которые нужно редиректить или 404 отдавать.

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

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

Ну и можно посмотреть про редиректы в htaccess.

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

Добавлено: 2020.07.09, 12:50
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);
    }

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

Добавлено: 2020.07.15, 15:21
Dominus
Возможно достаточно было бы этого:

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

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