Избавляемся от дублей PrestaShop, пагинация и сортировка

как вы решили вопрос со страницами товара по производителю? Совсем не понимаю ее смысл. На ней не работают фильтры, выводит одной портянкой все товары. Получается просто бесполезный дубль?
 
как вы решили вопрос со страницами товара по производителю? Совсем не понимаю ее смысл. На ней не работают фильтры, выводит одной портянкой все товары. Получается просто бесполезный дубль?
Если эти страницы бесполезны и являются дублями, то создайте правило в файле robots.txt и запретите их.
 
Notice: Undefined variable: canonical in /var/www/.../controllers/front/CategoryController.php on line 153

По выше указанному способу на 1.6.1.14 уже не работает. На 1.6.1.13 работает

Помог этот способ Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
<meta charset="utf-8" />
<title>{if $p != 1 and $page_name == 'category'}({$p})- {l s='Страница'} {/if}{if $p != 1 and $page_name == 'new-products'}({$p})- {l s='Страница'} {/if}{if $p != 1 and $page_name == 'prices-drop'}({$p})- {l s='Страница'} {/if}{if $page_name == 'product'}{l s='Купить'} {$product->name|escape:'html':'UTF-8'} - Название магазина ✓ {$product->reference|escape:'html':'UTF-8'}{else}{$meta_title|escape:'html':'UTF-8'}{/if}</title>
<meta name="description" content="{if $p != 1 and $page_name == 'category'}({$p})- {l s='Страница'} {/if}{if $page_name == 'product'}{l s='Купить'} {$product->name|escape:'html':'UTF-8'}{l s=' ➨ в магазине Название магазина ✓'} {else} {$meta_description|escape:'html':'UTF-8'}{/if}" />

Попробуйте это решение - мне помогло избавиться от дублей и +упростило жизнь СЕО-шникам.
 
<meta charset="utf-8" />
<title>{if $p != 1 and $page_name == 'category'}({$p})- {l s='Страница'} {/if}{if $p != 1 and $page_name == 'new-products'}({$p})- {l s='Страница'} {/if}{if $p != 1 and $page_name == 'prices-drop'}({$p})- {l s='Страница'} {/if}{if $page_name == 'product'}{l s='Купить'} {$product->name|escape:'html':'UTF-8'} - Название магазина ✓ {$product->reference|escape:'html':'UTF-8'}{else}{$meta_title|escape:'html':'UTF-8'}{/if}</title>
<meta name="description" content="{if $p != 1 and $page_name == 'category'}({$p})- {l s='Страница'} {/if}{if $page_name == 'product'}{l s='Купить'} {$product->name|escape:'html':'UTF-8'}{l s=' ➨ в магазине Название магазина ✓'} {else} {$meta_description|escape:'html':'UTF-8'}{/if}" />

Попробуйте это решение - мне помогло избавиться от дублей и +упростило жизнь СЕО-шникам.

если времени нет на ручную правку, то на PS 1.7 можно так избавиться от дублей титлов и мета-описаний:

в файле:
/themes/warehouse/templates/_partials/head.tpl

правим блок на:
Код:
<title>{block name='head_seo_title'}{$page.meta.title} | ShortNameOfYourShop{if $smarty.get.p and $smarty.get.p!=1} - {$smarty.get.p}{elseif $smarty.get.page and $smarty.get.page!=1} - {$smarty.get.page}{/if}{/block}</title>
<meta name="description" content="{block name='head_seo_description'}{$page.meta.description}{if $smarty.get.p and $smarty.get.p!=1} - {$smarty.get.p}{elseif $smarty.get.page and $smarty.get.page!=1} - {$smarty.get.page}{/if}{/block}">
 
@novoselov your solution is working perfectly on my PS 1.5.6.1 shop! Thank you very much!
Is there any chance to solve the same issue with blockbestsellers, because there are page duplicates with it also on WMT?

EDIT: Maybe too early for celebrating :(
When I enable debug mode it shows "undefined variable: canonical in CategoryController.php"
I tried the above suggestion to add:

'canonical' => ($page_name === 'category' ? $this->context->link->getCategoryLink($this->category) : null),

after: 'cart' => $cart, in FrontController.php

But it still shows the error on the first page of categories and no error on the other pages.

Any help will be highly appreciated!
 
Последнее редактирование:
I just tried another code:
Код:
{if $page_name == index}
        <link rel="canonical" href="{$base_dir}" />
        {elseif $page_name == product}
        <link rel="canonical" href="{$request_uri}" />
        {elseif $page_name == module-prestablog-blog}
        <link rel="canonical" href="{$request_uri}" />
        {elseif $page_name == category}
        <link rel="canonical" href="{$request_uri}" />
        {else}
        <link rel="canonical" href="/{$request_uri|substr:1|regex_replace:'/\/(.*)/':''|regex_replace:'/\?(.*)/':''}/" />
        {/if}
But I noticed that the index page of my site is pointed to the non HTTPS version, like: rel="canonical" href="Для просмотра ссылки Войди или Зарегистрируйся"
Do you think it could be an issue, that it is not pointing to the HTTPS version?
 
Or I should use $base_dir_ssl instead of $base_dir? Is there any disadvantage of using it?

You may answer in Russian I will understand it. It's just that my Russian is worse than my English :)
 
$base_dir_ssl - the best choice for you.

{elseif $page_name == product}
...
{elseif $page_name == module-prestablog-blog}
...
{elseif $page_name == category}
...

Код:
{elseif $page_name == 'product'}
...
{elseif $page_name == 'module-prestablog-blog'}
...
{elseif $page_name == 'category'}
...
'product', 'module-prestablog-blog', category' - it should be quoted "..." or '...'
 
Назад
Сверху