Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 23.07.2019 19:32:10

Дубли страниц для СЕО

Обратите внимание на URL

https://laravel.ru/index.php/posts/1125
https://laravel.ru/posts/1125

Открывается одна и та же страницы. Для поисковой системы это дубли. Как решить этот баг. Такая проблема на всех сайтах Laravel

Прикладываю свой htaccess.

Прошу не путать проблемы с DocumentRoot, когда не правильно настроен вследствие чего появляется "public/index.php" - это не тот случай.

<IfModule mod_rewrite.c>

    RewriteEngine On
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]

    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>



    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]


    # Handle Front Controller...
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]


</IfModule>

Не в сети

#2 23.07.2019 20:35:23

Re: Дубли страниц для СЕО

Есть как минимум два выхода: <link rel=canonical> чтобы поисковик знал правильный вариант и рерайт адреса.

https://support.google.com/webmasters/a … 9066?hl=en
https://stackoverflow.com/q/25105872/272885


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 23.07.2019 20:42:25

Re: Дубли страниц для СЕО

Вот тут ещё рерайты для nginx есть: https://laracasts.com/discuss/channels/ … completely


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#4 24.07.2019 08:35:33

Re: Дубли страниц для СЕО

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php[^/] /$1? [L,R=302,NC,NE]

RewriteCond %{THE_REQUEST} /index\.php [NC]
RewriteRule ^(.*?)index\.php(?:/(.*))?$ /$1$2? [L,R=302,NC,NE]

Данное решение мне помогло.

С canonical сложнее,

<link rel="canonical" href="{{ url()->current() }}" />

Формирует URL с /index.php/other/url/map
В таком варианте нужно будет использовать str_replace

Не в сети

#5 24.07.2019 23:34:56

Re: Дубли страниц для СЕО

В таком варианте нужно будет использовать str_replace

Даже если так, можно один раз написать функцию-хелпер canonical(), впендюрить в неё всю нужную логику и использовать её в шаблонах.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#6 16.08.2019 18:30:18

Re: Дубли страниц для СЕО

https://laravel.ru/index.php/posts/1125
https://laravel.ru/posts/1125

я уже 5 лет на связке nginx+phpfpm
у меня в принципе нет таких ссылок-дупов.

вот вам конфиг вирт хоста

<FQDN> - Fully qualified domain name - Полное имя домена == ставьте своё.

server {
    server_name             <FQDN>;
    root                    /path/to/public;
    access_log              /path/to/log/<FQDN>-access.log;
    error_log               /path/to/log/<FQDN>-error.log;
    include                 /etc/nginx/snippets/defaults.conf;
    client_max_body_size    0;
    client_body_buffer_size 16k;
    location ~ \\.php$ {
        try_files       $uri /index.php =404;
        include         fastcgi_params;
        fastcgi_pass    unix:/var/run/php/php-fpm.h.sock;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param    X-Real-IP           $remote_addr;
        fastcgi_param    X-Forwarded-Ssl     on;
        fastcgi_param    X-Forwarded-For     $proxy_add_x_forwarded_for;
        fastcgi_param    X-Forwarded-Proto   $scheme;
    }
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/<FQDN>/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/<FQDN>/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
    if ($host = <FQDN>) {
        return 301 https://$host$request_uri;
    }
    listen                  80;
    server_name             <FQDN>;
    return 404;
}

Надо будет полный набор конфы - посмотрите мои статьи, там чтото есть старенького.
Совсем приспичет - напишу новую.
Ну или за вознаграждение подниму вам ферму.

Не в сети

Подвал раздела