Ошибка пагинации ?page={page} при SEO

Тема в разделе "Ошибки и их решения", создана пользователем Ravilr, 21 янв 2017.

  1. Ravilr

    Ravilr Специалист

    Сообщения:
    4.065
    Симпатии:
    1.097
    Данный баг проявляется при включении сео.
    Присутствует в версиях 2.2, 2.3 (opencart, ocstore), ну и до сих пор не исправлена.

    Как увидеть? Включаем ЧПУ, заходим в категорию на вторую страницу и смотрим какая ссылка у нас на первой странице!

    Как исправить? Так.

    \system\library\pagination.php

    почти в начале найти
    Код:
            if ($page > 1) {
                $output .= '<li><a href="' . str_replace(array('&amp;page={page}', '&page={page}'), '', $this->url) . '">' . $this->text_first . '</a></li>';
            
                if ($page - 1 === 1) {
                    $output .= '<li><a href="' . str_replace(array('&amp;page={page}', '&page={page}'), '', $this->url) . '">' . $this->text_prev . '</a></li>';
                } else {
                    $output .= '<li><a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a></li>';
                }
            }
    и заменить на
    PHP:
            if ($page 1) {
                
    $output .= '<li><a href="' str_replace(array('&amp;page={page}''?page={page}'), ''$this->url) . '">' $this->text_first '</a></li>';
            
                if (
    $page === 1) {
                    
    $output .= '<li><a href="' str_replace(array('&amp;page={page}''?page={page}'), ''$this->url) . '">' $this->text_prev '</a></li>';
                } else {
                    
    $output .= '<li><a href="' str_replace('{page}'$page 1$this->url) . '">' $this->text_prev '</a></li>';
                }
            }

    найти ближе к концу, строку
    Код:
    $output .= '<li><a href="' . str_replace(array('&amp;page={page}', '&page={page}'), '', $this->url) . '">' . $i . '</a></li>';
    и заменить на
    PHP:
    $output .= '<li><a href="' str_replace(array('&amp;page={page}''?page={page}'), ''$this->url) . '">' $i '</a></li>';
     
    Последнее редактирование: 21 янв 2017
    Chukcha, Bkmz и solunski.d нравится это.
  2. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.570
    Симпатии:
    436
    Вот тема с ocmod
     
  3. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    А у меня ссылка на первую страницу со второй такая
    САЙТ/medik/?page={page}

    Это и есть баг, который нужно исправить?
    (изначально первая страница открывается такой САЙТ/medik/ , но при переходе назад, со второй на первую - вот так, как показано выше)
     
  4. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    676
    Симпатии:
    71
    А что делать, если ото, шо указано "в начале найти", - оно у меня закомментировано всё?
    Я когда убирала стрелочки в пагинации, весь этот блок заблокировала, шоб они не показывались.

    Вот результат проверки рекомендаций ТС:

    Первая часть (то, что "почти в начале найти") у меня вся заблокирована, она влияет на стрелочки пагинации (во всяком случае, у меня так)

    Вторая часть (то, что "найти ближе к концу, строку") у меня заблокирована частично, и предлагаемая к изменению строка (она у меня шла в коде под номером 74) была открытой, рабочей.

    Я изменила мою стандартную строку на строку, предлагаемую ТС
    (там суть в вопросительном знаке только перед ?page={page}, а было &page={page}, что и выдавало баг)

    Проверила. Теперь ссылка на переход со второй страницы назад, на первую выгляядит нормально, так

    САЙТ/medik/

    Таким образом, у меня оказалось, что не всё нужно менять, а только нижнюю строку.

    --------------------------------
    Благодарю.
     
  5. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    "


    данное решение помогло избавиться от этого огрызка
    ?page={page}

    при переходе со второй страницы категории на первую. НО! страница то в итоге так и осталась. роботы ее видят, находят.
    как быть с этой проблемой?
    Спасибо
     
  6. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.526
    Симпатии:
    245
    через htaccess попробуйте сделать редирект на 404
     
  7. Dimasscus

    Dimasscus Пользователь

    Сообщения:
    110
    Симпатии:
    1
    пробовал. но не придумал как обыграть знак вопроса в урл. не работает.
    через скрипт конечно можно но это ж кошмар.
    почему вообще оно существует. ведь в более старых версиях не было таких чудес
     
  8. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.526
    Симпатии:
    245
    В одной из версий был такой глюк.. вот и появилось.
    Можно прямо в контроллере списка категорий написать что то типа такого
    PHP:
            if (isset($this->request->get['page'])) {
                if (
    $this->request->get['page']) == '{page}' {
                    
    $this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');
                }
            }