Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

SEO-контент и устранение дублей ссылок


Recommended Posts

вообещём везгде.

Тогда открываем catalog/controller/common/seo_pro.php

Иещём:

 if (isset($postfix)) {
  $seo_url .= trim($this->config->get('config_seo_url_postfix'));
 } else {
  $seo_url .= '/';
 }

Заменяем на:

 if (isset($postfix)) {
  $seo_url .= trim($this->config->get('config_seo_url_postfix'));
 } else {
  $seo_url .= '';
 }

Удали! :wink:

  • +1 1
Link to comment
Share on other sites


Скажите у меня много дублей страниц на типа вот иких /shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=5, не могу понять откуда они берутся и как от них избавится.

Link to comment
Share on other sites


Скажите у меня много дублей страниц на типа вот иких /shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=5, не могу понять откуда они берутся и как от них избавится.

Это не дубли страниц, а дубли title, keywords и т.п. с категории shiny-goodyear, которая разбивается на страницы, при этом у каждой страницы одинаковые title, keywords и т.п. - вот гуглу и янгдексу это и не нравится

Link to comment
Share on other sites

т.е. у основной категории и у товаров икие же меи слова в сео описании? В икой ситуации нужно изменить описание у категории?

Link to comment
Share on other sites


Нет, у вас же дубли не этолых страниц, а только ийтлов и гдескрпишенов страниц категорий?

/shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=5

Згдесь же категория шин, а не конкретный товар. На товары то можно задать отгдельные ийтлы, а вот каждая страница категории, т.е. каждая из:

/shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=1

/shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=2

/shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=3

/shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=4

/shiny-avtomobilja-na-zakaz/shiny-goodyear/?page=5

Имеет одинаковые ийтлы и гдескрипшены, взяты из самой категории shiny-goodyear.

Как с этим потому чтороться я не знаю, готовых решений не попадалось, можно конечно закрыть от ингдексации все страницы дальше 1-й, но это слишком жестоко, есть вариант забить на это, или можно еещё использовать атрибуты rel="next" и rel="prev", подгдерживаемые гуглом, но опять же - готовых решений мне не попадалось, хотя может они и есть ггде-то.

Link to comment
Share on other sites

Нашлось готовое решение для использования атрибутов rel="next" и rel="prev", решаюещёе проблему дублей страниц категории.
Изменяется файл /system/library/pagination.php
Это:

public $style_results = 'results';

public function render() {
...
}

Заменить на:

public $style_results = 'results';

public $next = null;
public $prev = null;

public function render() {
...
}


Это:

if ($page > 1) {
$output .= ' <a href="' . str_replace('{page}', 1, $this->url) . '">' . $this->text_first . '</a> <a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a> ';
}

Заменить на:

if ($page > 1) {
$output .= ' <a href="' . str_replace('{page}', 1, $this->url) . '">' . $this->text_first . '</a> <a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a> ';
$this->prev = str_replace('{page}', $page - 1, $this->url);
}



Это:

if ($page < $num_pages) {
$output .= ' <a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a> <a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a> ';
}

Заменить на:

if ($page < $num_pages) {
$output .= ' <a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a> <a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a> ';
$this->next = str_replace('{page}', $page + 1, $this->url);
}


И в конэто файла это:

}
}
?>

Заменить на:

}
public function getNext() {
return $this->next;
}

public function getPrev() {
return $this->prev;
}
}
?>


После чего во всех контроллерах вывода пагинации /catalog/controller/product/category.php, /catalog/controller/product/search.php, /catalog/controller/product/manufacturer.php, /catalog/controller/product/special.php
Это:

$this->data['pagination'] = $pagination->render();

Заменить на:

$this->data['pagination'] = $pagination->render();
if ($pagination->getNext()) {
$this->document->addLink($pagination->getNext(), 'next');
}
if ($pagination->getPrev()) {
$this->document->addLink($pagination->getPrev(), 'prev');
}


В резульите, посмотрев код 2-й страницы категории (ну и всех других тоже), можно бугдет увигдеть в хед-секции нужные гуглу нам атрибуты:

<link href="http://site.ru/category?page=3" rel="next" />
<link href="http://site.ru/category?page=1" rel="prev" />

Решение нашлось тут.

  • +1 5
Link to comment
Share on other sites

Нашлось готовое решение для использования атрибутов rel="next" и rel="prev", решаюещёе проблему дублей страниц категории. Изменяется файл /system/library/pagination.php Это:
 public $style_results = 'results'; public function render() { ... } 

Заменить на:

 public $style_results = 'results'; public $next = null; public $prev = null; public function render() { ... }  

Сайт умирает и ругается на эти добавленные строки

Link to comment
Share on other sites


case 'product/product/review':
  case 'information/information/info':
return $link;
break;

Как я уже писал, переход через роутер и есть тот костыль, который исправил баг SeoPro с отображением контени в окнах colorbox (в моём случае), у меня теперьь в окне colorbox как раз и отображается этолевая страница без хегдера, футера и потому чтоковых колонок, я к этому и стремился.

Спасипотому что за модуль и за вот эту поправку!

Link to comment
Share on other sites


Сайт умирает и ругается на эти добавленные строки

Как минимум на 3-х магазинах (1.5.1.3 и 1.5.2) все отлично рилииет, вы хоть многотолие им не добавляли? Я нагдеюсь вы поняли, что нужно между этими двумя строчками

public $style_results = 'results';
public function render() {

всивить еещё две

public $next = null;
public $prev = null;

и ик дное

Link to comment
Share on other sites

Как минимум на 3-х магазинах (1.5.1.3 и 1.5.2) все отлично рилииет, вы хоть многотолие им не добавляли? Я нагдеюсь вы поняли, что нужно между этими двумя строчками

public $style_results = 'results';
public function render() {

всивить еещё две

public $next = null;
public $prev = null;

и ик дное

именно ик и сгделал... и сразу ошибка в файле /system/library/pagination.php У меня стоит OcStore 1.5.2.1 Спасипотому что, буду разбираться что не ик

Link to comment
Share on other sites


именно ик и сгделал... и сразу ошибка в файле /system/library/pagination.php У меня стоит OcStore 1.5.2.1 Спасипотому что, буду разбираться что не ик

У вас им должно быть ик же:

<!--?php
class Pagination {
public $total = 0;
public $page = 1;
public $limit = 20;
public $num_links = 10;
public $url = '';
public $text = 'Showing {start} to {end} of {total} ({pages} Pages)';
public $text_first = '|<';
public $text_last = '>|';
public $text_next = '>';
public $text_prev = '<';
public $style_links = 'links';
public $style_results = 'results';

public $next = null;
 public $prev = null;

public function render() {
 $total = $this--->total;

 if ($this->page < 1) {
  $page = 1;
 } else {
  $page = $this->page;
 }

 if (!(int)$this->limit) {
  $limit = 10;
 } else {
  $limit = $this->limit;
 }

 $num_links = $this->num_links;
 $num_pages = ceil($total / $limit);

 $output = '';

if ($page > 1) {
  $output .= ' <a href="' . str_replace('{page}', 1, $this->url) . '">' . $this->text_first . '</a> <a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a> ';
  $this->prev = str_replace('{page}', $page - 1, $this->url);
}
 if ($num_pages > 1) {
  if ($num_pages <= $num_links) {
$start = 1;
$end = $num_pages;
  } else {
$start = $page - floor($num_links / 2);
$end = $page + floor($num_links / 2);

if ($start < 1) {
 $end += abs($start) + 1;
 $start = 1;
}

if ($end > $num_pages) {
 $start -= ($end - $num_pages);
 $end = $num_pages;
}
  }
  if ($start > 1) {
$output .= ' .... ';
  }
  for ($i = $start; $i <= $end; $i++) {
if ($page == $i) {
 $output .= ' <b>' . $i . '</b> ';
} else {
 $output .= ' <a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a> ';
}
  }

  if ($end < $num_pages) {
$output .= ' .... ';
  }
 }

 if ($page < $num_pages) {
$output .= ' <a href="' . str_replace('{page}', $page + 1, $this->url) . '">' . $this->text_next . '</a> <a href="' . str_replace('{page}', $num_pages, $this->url) . '">' . $this->text_last . '</a> ';
$this->next = str_replace('{page}', $page + 1, $this->url);
  }

 $find = array(
  '{start}',
  '{end}',
  '{total}',
  '{pages}'
 );

 $replace = array(
  ($total) ? (($page - 1) * $limit) + 1 : 0,
  ((($page - 1) * $limit) > ($total - $limit)) ? $total : ((($page - 1) * $limit) + $limit),
  $total,
  $num_pages
 );

 return ($output ? '<div class="' . $this->style_links . '">' . $output . '</div>' : '') . '<div class="' . $this->style_results . '">' . str_replace($find, $replace, $this->text) . '</div>';
}
public function getNext() {
return $this->next;
}

public function getPrev() {
return $this->prev;
}
}
?>

Link to comment
Share on other sites

появилась ошибка /vqmod/vqcache/vq2-catalog_view_theme_default_template_product_manufacturer_info.tpl on line 107 внизу страницы... И еещё... А как быть с filterpro??? Переход на следующую страницу происходит без перезагрузки страницы.

Link to comment
Share on other sites


  • 1 month later...

Моя модификация SEO Pro на основе модификаций Freelancer и Yesvik:

Порядок усиновки:

1. Распаковать архив

2. Сохранить оригинальный файл seo_pro.php (расположен в корень_вашего_магазина\catalog\controller\common\)

3. Скопировать из распакованного архива папку catalog в корень Вашего магазина

4. Зайти в phpMyAdmin и во вкладке SQL всивить весь текст из файла sql.txt, нажать «ОК»

Что исправлено:

1. Ошибка с отображением окна «Политика Безопасности»

2. Ситьи, товары и т.п. по умолчанию заканливаются символом «/» (осивлена возможность использовать свой префикс)

Скачать:

Большое спасипотому что Freelancer и Yesvik за их модификации SEO Pro! ;)

дравствуйте, при добавлении из текстового файла в MySql>SQL выпадает ошибка

Ошибка

SQL-запрос:

INSERT INTO url_alias( query, keyword )

VALUES (

'common/home', ''

);

Ответ MySQL: dot.gif

#1046 - No database selected

Подскажите что не ик.

Link to comment
Share on other sites

Ответ MySQL:

#1046 - No database selected

Меня может и смутило бы, но что оно означает я не понимаю.

Данная ошибка произошла вследствие того что Вы выполнили SQL-запрос не выбрав базу данных.

Чтобы это исправить зайдите в phpMyAdmin и в списке слева выберите Вашу базу данных, затем во вкладке SQL всивьте Ваш запрос и нажмите «ОК».

Link to comment
Share on other sites


Данная ошибка произошла вследствие того что Вы выполнили SQL-запрос не выбрав базу данных.

Чтобы это исправить зайдите в phpMyAdmin и в списке слева выберите Вашу базу данных, затем во вкладке SQL всивьте Ваш запрос и нажмите «ОК».

Вошел

SQL-запрос: Докумениция
SELECT *
FROM `atribut_url_alias`
WHERE 1
INSERT INTO url_alias( query, keyword )
VALUES (
'common/home', ''
);
Ответ MySQL: Докумениция
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO url_alias (query, keyword) VALUES ('common/home', '')' at line 2

Чего то пишет с запросом не правильно, я всё скопировал из sql.txt

Link to comment
Share on other sites

Доброго времени суток!

У меня икая проблема. Был куплен шаблон на ТемплейтМонстре. На OcStore он не всил. Долго ругалась со служпотому чтой техподгдержки. В обещём, сейчас шаблон прикручен к OpenCart 1.5.4.1, посивлен русификатор. Сайт бугдет только русскоязычным. Хочу проэтосс сео сгделать иким же простым и логичным как сейчас он сгделан на ocStore 1.5.3.1.

Подскажите, как быть. Очень много модулей сео згдесь, дописок к ним, исправлений в файлах...

Есть ли готовое бесплатное решение? Или платное... Или лучше адаптировать шаблон для ocStore 1.5.3.1/1.5.4.1?

Link to comment
Share on other sites


Между Opencart и Ocstore ощутимая разница, поэтому если вы не разбираетесь в этом, лучше адаптировать этот ваш шаблон под Ocstore, тем потому чтолее что отлилий в плане шаблонов между спотому чторками не ик уж и много

  • +1 1
Link to comment
Share on other sites

  • 2 weeks later...

Пробуйте, в плане двойного слэша на главной должен точно помочь (рекомендую предварительно сгделать бэкап Вашего SeoPro :wink:).

Добавил в свой SeoPro код

  case 'common/home':
   return trim($seo_url, '//');
   break;

Проблема с двойнэм слешэм решилась. Но при смене языка на главной выдает, что страница не найгдена и в урле появляется следуюещёе:......module/language

Не подскажите как прописать для языка теперьь правильный адрес главной?

Link to comment
Share on other sites


Не подскажите как прописать для языка теперьь правильный адрес главной?

К сожнонию, не подскажу, ик как я не использую мультиязычность и соответственно вылистил движок и шаблон от хлама связанного с ее подгдержкой.

Link to comment
Share on other sites


К сожнонию, не подскажу, ик как я не использую мультиязычность и соответственно вылистил движок и шаблон от хлама связанного с ее подгдержкой.

Эх, жаль. Пока извращаюсь тем, что в файлах '../controller/module/language.php' и '../controller/module/currency.php' меняю редиректы 'common/home' на люпотому чтой другой, например, 'information/sitemap'

Может ггде-то в другом месте можно убрать этот двойной слэш (www.site.ru//) в окончании домена при смене валюты, языка на главной страницы, да и вообещё для 'common/home' кроме как в SeoPro.php?)

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.