imushroom Posted July 14, 2016 Share Posted July 14, 2016 (edited) Усиновлен Opencart 1.5.4.1, SeoPro, настроены ЧПУ. Как избавиться от иких дублей: site.ru/index.php site.ru/index.php? site.ru/index.php?123 site.ru/index.php?qwe и т.д. По всем ответ 200 ОК Т.е. бесконечное множество дублей... как то можно от них избавиться? Edited July 14, 2016 by imushroom Link to comment Share on other sites More sharing options...
chukcha Posted July 15, 2016 Share Posted July 15, 2016 Вы их сами генерите? https://www.google.ru/?123&gws_rd=ssl Link to comment Share on other sites More sharing options... imushroom Posted July 15, 2016 Share Posted July 15, 2016 Вы их сами генерите? https://www.google.ru/?123&gws_rd=ssl Нет. Но я хочу убрать саму возможность, т.к. по сути все эти страницы являются дублями главной. Link to comment Share on other sites More sharing options... Otvet Posted July 16, 2016 Share Posted July 16, 2016 А щит от лазера из космоса купили? ведь по сути это является угрозой Link to comment Share on other sites More sharing options... Dimasscus Posted July 21, 2016 Share Posted July 21, 2016 Привет всем. под ветку 2.2.0.0 есть решение? Link to comment Share on other sites More sharing options... PeterStudio Posted July 23, 2016 Share Posted July 23, 2016 Приветствую всех! И у меня тоже возникла проблема с дублями, OP 2.2, seo_pro Дубли получается вот икие /category1/sub-category1/tovar1 /category1/tovar1 Почему seo_pro икое не обрабатывает правильно? И как лучше всего исправить? Link to comment Share on other sites More sharing options... propmr Posted July 29, 2016 Share Posted July 29, 2016 Ребят помогите пожалуйси уже и не знаю что гделать!икая беда с очень многими товарамиврогде как сео все правильно гделаетраньше икого небылос недавних пор иким обвместе пропадают товарыхотя в списке они есть но как заходишь в саму карточку то вот икая лабуда Link to comment Share on other sites More sharing options... 4 weeks later... LeonidxLee Posted August 24, 2016 Share Posted August 24, 2016 Здравствуйте! Приобреил Ваш модуль для сайи, модуль рилииет, всё отлично. Начали строить второй сайт хотим усиновить SeoPro. Вопрос на второй сайт модуль необходимо покупать повторно? Просто из описания модуля это не очевидно... https://opencart-forum.ru/files/file/1155-модуль-управления-seopro/ В личку написать не получается, пишет что у вас нет возможности принимать новые сообещёния... ПС. Valogroup, мы с вами соседи по корпусу в Румянэтово :) Link to comment Share on other sites More sharing options... vlad073 Posted September 1, 2016 Share Posted September 1, 2016 Доброе время суток. Кто нибудь решил вопрос с одинаковыми подкатегориями? То есть структура икая: -Бумага --Бумага А4 --Цветная ---- -Картон --Картон А4 --Цветной У цветной и цветная - url один и тот же. Изменять нельзя! Соответственно открывается только одна страница, которая первая в выпотому чторке. Писал ик в файле catalog\controller\common\seo_pro.php: foreach ($parts as $keyword) {if (isset($a) && $a[0]=="category_id") {$query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($keyword) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='".$a[1]."'");if ($query->num_rows) {$rows[] = array('keyword' => $keyword, 'query' => $query->row['query']);$a = explode("=",$query->row['query']);}} else {if (isset($this->cache_data['keywords'][$keyword])) {$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);$a=explode("=",$this->cache_data['keywords'][$keyword]);}}} В резульите категории сили открываться как надо, но при клике на товар - Запрашиваемая страница не найгдена. Исходный код файла seo_pro.php class ControllerCommonSeoPro extends Controller {private $cache_data = null;private $languages = array();private $config_language;public function __construct($registry) {parent::__construct($registry);$this->cache_data = $this->cache->get('seo_pro');if (!$this->cache_data) {$query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias");$this->cache_data = array();foreach ($query->rows as $row) {$this->cache_data['keywords'][$row['keyword']] = $row['query'];$this->cache_data['queries'][$row['query']] = $row['keyword'];}$this->cache->set('seo_pro', $this->cache_data);}$query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'");$this->config_language = $query->row['value'];$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'");foreach ($query->rows as $result) {$this->languages[$result['code']] = $result;}}public function index() {// language$code = $this->config_language;if(isset($this->request->get['route'])) {$routes=explode('/',$this->request->get['route']);}if(isset($this->request->get['_route_'])) {$route_ = $this->request->get['_route_'];$tokens = explode('/', $this->request->get['_route_']);if(array_key_exists($tokens[0], $this->languages)) {$code = $tokens[0];$this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1);}if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') {unset($this->request->get['_route_']);}}if ($code == $this->config_language &&isset($this->request->cookie['language']) &&$this->request->cookie['language'] != $code &&isset($this->request->server['HTTP_X_REQUESTED_WITH']) &&strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {$code = $this->request->cookie['language'];}if (isset($this->request->cookie['language']) &&$this->request->cookie['language'] != $code &&isset($routes) &&trim($routes[0]=='module')) {$code = $this->request->cookie['language'];}if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) {$this->session->data['language'] = $code;}$xhttprequested = isset($this->request->server['HTTP_X_REQUESTED_WITH']) && $this->request->server['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest';$captcha = isset($this->request->get['route']) && $this->request->get['route']=='product/product/captcha';if(!$xhttprequested && !$captcha) {setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);}$this->config->set('config_language_id', $this->languages[$code]['language_id']);$this->config->set('config_language', $this->languages[$code]['code']);$language = new Language($this->languages[$code]['directory']);$language->load($this->languages[$code]['filename']);$this->registry->set('language', $language);// Add rewrite to url classif ($this->config->get('config_seo_url')) {$this->url->addRewrite($this);} else {return;}// Decode URLif (!isset($this->request->get['_route_'])) {$this->validate();} else {$route = $this->request->get['_route_'];unset($this->request->get['_route_']);$parts = explode('/', trim(utf8_strtolower($route), '/'));list($last_part) = explode('.', array_pop($parts));array_push($parts, $last_part);$rows = array();foreach ($parts as $keyword) {if (isset($this->cache_data['keywords'][$keyword])) {$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);}}if (count($rows) == sizeof($parts)) {$queries = array();foreach ($rows as $row) {$queries[utf8_strtolower($row['keyword'])] = $row['query'];}reset($parts);foreach ($parts as $part) {$url = explode('=', $queries[$part], 2);if ($url[0] == 'category_id') {if (!isset($this->request->get['path'])) {$this->request->get['path'] = $url[1];} else {$this->request->get['path'] .= '_' . $url[1];}} elseif (count($url) > 1) {$this->request->get[$url[0]] = $url[1];}}} else {$this->request->get['route'] = 'error/not_found';}if (isset($this->request->get['product_id'])) {$this->request->get['route'] = 'product/product';if (!isset($this->request->get['path'])) {$path = $this->getPathByProduct($this->request->get['product_id']);if ($path) $this->request->get['path'] = $path;}} elseif (isset($this->request->get['path'])) {$this->request->get['route'] = 'product/category';} elseif (isset($this->request->get['manufacturer_id'])) {$this->request->get['route'] = 'product/manufacturer/product';if(in_array(substr(VERSION, 0, 5), array('1.5.4', '1.5.5'))) {$this->request->get['route'] = 'product/manufacturer/info';}} elseif (isset($this->request->get['information_id'])) {$this->request->get['route'] = 'information/information';} elseif(isset($this->cache_data['queries'][$route_])) {header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');$this->response->redirect($this->cache_data['queries'][$route_]);} else {if (isset($queries[$parts[0]])) {$this->request->get['route'] = $queries[$parts[0]];}}$this->validate();if (isset($this->request->get['route'])) {return $this->forward($this->request->get['route']);}}}public function rewrite($link, $code = '') {if(!$code) {$code = $this->session->data['language'];}if (!$this->config->get('config_seo_url')) return $link;$seo_url = '';$component = parse_url(str_replace('&', '&', $link));$data = array();parse_str($component['query'], $data);$route = $data['route'];unset($data['route']);switch ($route) {case 'product/product':if (isset($data['product_id'])) {$tmp = $data;$data = array();if ($this->config->get('config_seo_url_include_path')) {$data['path'] = $this->getPathByProduct($tmp['product_id']);if (!$data['path']) return $link;}$data['product_id'] = $tmp['product_id'];if (isset($tmp['tracking'])) {$data['tracking'] = $tmp['tracking'];}}break;case 'product/category':if (isset($data['path'])) {$category = explode('_', $data['path']);$category = end($category);$data['path'] = $this->getPathByCategory($category);if (!$data['path']) return $link;}break;case 'product/product/review':case 'information/information/info':return $link;break;default:break;}if ($component['scheme'] == 'https') {$link = $this->config->get('config_ssl');} else {$link = $this->config->get('config_url');}if ($code != $this->config_language){$link .= $code . '/index.php?route=' . $route;} else{$link .= 'index.php?route=' . $route;}if (count($data)) {$link .= '&' . urldecode(http_build_query($data, '', '&'));}$queries = array();foreach ($data as $key => $value) {switch ($key) {case 'product_id':case 'manufacturer_id':case 'category_id':case 'information_id':$queries[] = $key . '=' . $value;unset($data[$key]);$postfix = 1;break;case 'path':$categories = explode('_', $value);foreach ($categories as $category) {$queries[] = 'category_id=' . $category;}unset($data[$key]);break;default:break;}}if(empty($queries)) {$queries[] = $route;}$rows = array();foreach($queries as $query) {if(isset($this->cache_data['queries'][$query])) {$rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]);}}if(count($rows) == count($queries)) {$aliases = array();foreach($rows as $row) {$aliases[$row['query']] = $row['keyword'];}foreach($queries as $query) {$seo_url .= '/' . rawurlencode($aliases[$query]);}}if ($seo_url == '') return $link;if($code != $this->config_language) {$seo_url = $code . '/' . trim($seo_url, '/');} else {$seo_url = trim($seo_url, '/');}if ($component['scheme'] == 'https') {$seo_url = $this->config->get('config_ssl') . $seo_url;} else {$seo_url = $this->config->get('config_url') . $seo_url;}if (isset($postfix)) {$seo_url .= trim($this->config->get('config_seo_url_postfix'));} else {$seo_url .= '/';}if(substr($seo_url, -2) == '//') {$seo_url = substr($seo_url, 0, -1);}if (count($data)) {$seo_url .= '?' . urldecode(http_build_query($data, '', '&'));}return $seo_url;}private function getPathByProduct($product_id) {$product_id = (int)$product_id;if ($product_id < 1) return false;static $path = null;if (!is_array($path)) {$path = $this->cache->get('product.seopath');if (!is_array($path)) $path = array();}if (!isset($path[$product_id])) {$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1");$path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);$this->cache->set('product.seopath', $path);}return $path[$product_id];}private function getPathByCategory($category_id) {$category_id = (int)$category_id;if ($category_id < 1) return false;static $path = null;if (!is_array($path)) {$path = $this->cache->get('category.seopath');if (!is_array($path)) $path = array();}if (!isset($path[$category_id])) {$max_level = 10;$sql = "SELECT CONCAT_WS('_'";for ($i = $max_level-1; $i >= 0; --$i) {$sql .= ",t$i.category_id";}$sql .= ") AS path FROM " . DB_PREFIX . "category t0";for ($i = 1; $i < $max_level; ++$i) {$sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";}$sql .= " WHERE t0.category_id = '" . $category_id . "'";$query = $this->db->query($sql);$path[$category_id] = $query->num_rows ? $query->row['path'] : false;$this->cache->set('category.seopath', $path);}return $path[$category_id];}private function validate() {if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') {return;}if(empty($this->request->get['route'])) {$this->request->get['route'] = 'common/home';}if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {return;}if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {$url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/'));$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL'));} else {$url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/'));$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL'));}if (rawurldecode($url) != rawurldecode($seo)) {header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');$this->response->redirect($seo);}}private function getQueryString($exclude = array()) {if (!is_array($exclude)) {$exclude = array();}return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude))));}}?> Может кто подсказать как дальше пилить? Или какое то другое решение сложившейся проблемы. OC 1.5.6.4 Link to comment Share on other sites More sharing options... vlad073 Posted September 1, 2016 Share Posted September 1, 2016 Доброе время суток. Кто нибудь решил вопрос с одинаковыми подкатегориями? То есть структура икая: -Бумага --Бумага А4 --Цветная ---- -Картон --Картон А4 --Цветной У цветной и цветная - url один и тот же. Изменять нельзя! Соответственно открывается только одна страница, которая первая в выпотому чторке. Писал ик в файле catalog\controller\common\seo_pro.php: foreach ($parts as $keyword) { if (isset($a) && $a[0]=="category_id") { $query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($keyword) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='".$a[1]."'"); if ($query->num_rows) { $rows[] = array('keyword' => $keyword, 'query' => $query->row['query']); $a = explode("=",$query->row['query']); } } else { if (isset($this->cache_data['keywords'][$keyword])) { $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]); $a=explode("=",$this->cache_data['keywords'][$keyword]); } } } В резульите категории сили открываться как надо, но при клике на товар - Запрашиваемая страница не найгдена. Исходный код файла seo_pro.php class ControllerCommonSeoPro extends Controller { private $cache_data = null; private $languages = array(); private $config_language; public function __construct($registry) { parent::__construct($registry); $this->cache_data = $this->cache->get('seo_pro'); if (!$this->cache_data) { $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias"); $this->cache_data = array(); foreach ($query->rows as $row) { $this->cache_data['keywords'][$row['keyword']] = $row['query']; $this->cache_data['queries'][$row['query']] = $row['keyword']; } $this->cache->set('seo_pro', $this->cache_data); } $query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'"); $this->config_language = $query->row['value']; $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'"); foreach ($query->rows as $result) { $this->languages[$result['code']] = $result; } } public function index() { // language $code = $this->config_language; if(isset($this->request->get['route'])) { $routes=explode('/',$this->request->get['route']); } if(isset($this->request->get['_route_'])) { $route_ = $this->request->get['_route_']; $tokens = explode('/', $this->request->get['_route_']); if(array_key_exists($tokens[0], $this->languages)) { $code = $tokens[0]; $this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1); } if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') { unset($this->request->get['_route_']); } } if ($code == $this->config_language && isset($this->request->cookie['language']) && $this->request->cookie['language'] != $code && isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { $code = $this->request->cookie['language']; } if (isset($this->request->cookie['language']) && $this->request->cookie['language'] != $code && isset($routes) && trim($routes[0]=='module')) { $code = $this->request->cookie['language']; } if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) { $this->session->data['language'] = $code; } $xhttprequested = isset($this->request->server['HTTP_X_REQUESTED_WITH']) && $this->request->server['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'; $captcha = isset($this->request->get['route']) && $this->request->get['route']=='product/product/captcha'; if(!$xhttprequested && !$captcha) { setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']); } $this->config->set('config_language_id', $this->languages[$code]['language_id']); $this->config->set('config_language', $this->languages[$code]['code']); $language = new Language($this->languages[$code]['directory']); $language->load($this->languages[$code]['filename']); $this->registry->set('language', $language); // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } else { return; } // Decode URL if (!isset($this->request->get['_route_'])) { $this->validate(); } else { $route = $this->request->get['_route_']; unset($this->request->get['_route_']); $parts = explode('/', trim(utf8_strtolower($route), '/')); list($last_part) = explode('.', array_pop($parts)); array_push($parts, $last_part); $rows = array(); foreach ($parts as $keyword) { if (isset($this->cache_data['keywords'][$keyword])) { $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]); } } if (count($rows) == sizeof($parts)) { $queries = array(); foreach ($rows as $row) { $queries[utf8_strtolower($row['keyword'])] = $row['query']; } reset($parts); foreach ($parts as $part) { $url = explode('=', $queries[$part], 2); if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } elseif (count($url) > 1) { $this->request->get[$url[0]] = $url[1]; } } } else { $this->request->get['route'] = 'error/not_found'; } if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; if (!isset($this->request->get['path'])) { $path = $this->getPathByProduct($this->request->get['product_id']); if ($path) $this->request->get['path'] = $path; } } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; if(in_array(substr(VERSION, 0, 5), array('1.5.4', '1.5.5'))) { $this->request->get['route'] = 'product/manufacturer/info'; } } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } elseif(isset($this->cache_data['queries'][$route_])) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($this->cache_data['queries'][$route_]); } else { if (isset($queries[$parts[0]])) { $this->request->get['route'] = $queries[$parts[0]]; } } $this->validate(); if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link, $code = '') { if(!$code) { $code = $this->session->data['language']; } if (!$this->config->get('config_seo_url')) return $link; $seo_url = ''; $component = parse_url(str_replace('&', '&', $link)); $data = array(); parse_str($component['query'], $data); $route = $data['route']; unset($data['route']); switch ($route) { case 'product/product': if (isset($data['product_id'])) { $tmp = $data; $data = array(); if ($this->config->get('config_seo_url_include_path')) { $data['path'] = $this->getPathByProduct($tmp['product_id']); if (!$data['path']) return $link; } $data['product_id'] = $tmp['product_id']; if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; } } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); if (!$data['path']) return $link; } break; case 'product/product/review': case 'information/information/info': return $link; break; default: break; } if ($component['scheme'] == 'https') { $link = $this->config->get('config_ssl'); } else { $link = $this->config->get('config_url'); } if ($code != $this->config_language){ $link .= $code . '/index.php?route=' . $route; } else{ $link .= 'index.php?route=' . $route; } if (count($data)) { $link .= '&' . urldecode(http_build_query($data, '', '&')); } $queries = array(); foreach ($data as $key => $value) { switch ($key) { case 'product_id': case 'manufacturer_id': case 'category_id': case 'information_id': $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; default: break; } } if(empty($queries)) { $queries[] = $route; } $rows = array(); foreach($queries as $query) { if(isset($this->cache_data['queries'][$query])) { $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]); } } if(count($rows) == count($queries)) { $aliases = array(); foreach($rows as $row) { $aliases[$row['query']] = $row['keyword']; } foreach($queries as $query) { $seo_url .= '/' . rawurlencode($aliases[$query]); } } if ($seo_url == '') return $link; if($code != $this->config_language) { $seo_url = $code . '/' . trim($seo_url, '/'); } else { $seo_url = trim($seo_url, '/'); } if ($component['scheme'] == 'https') { $seo_url = $this->config->get('config_ssl') . $seo_url; } else { $seo_url = $this->config->get('config_url') . $seo_url; } if (isset($postfix)) { $seo_url .= trim($this->config->get('config_seo_url_postfix')); } else { $seo_url .= '/'; } if(substr($seo_url, -2) == '//') { $seo_url = substr($seo_url, 0, -1); } if (count($data)) { $seo_url .= '?' . urldecode(http_build_query($data, '', '&')); } return $seo_url; } private function getPathByProduct($product_id) { $product_id = (int)$product_id; if ($product_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('product.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$product_id])) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1"); $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0); $this->cache->set('product.seopath', $path); } return $path[$product_id]; } private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('category.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 10; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } private function validate() { if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') { return; } if(empty($this->request->get['route'])) { $this->request->get['route'] = 'common/home'; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); } } private function getQueryString($exclude = array()) { if (!is_array($exclude)) { $exclude = array(); } return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude)))); } } ?> Может кто подсказать как дальше пилить? Или какое то другое решение сложившейся проблемы. OC 1.5.6.4 Разобрался с этим - рилииет все правильно. Вот код, кому-то может пригодиться class ControllerCommonSeoPro extends Controller { private $cache_data = null; public function __construct($registry) { parent::__construct($registry); $this->cache_data = $this->cache->get('seo_pro'); if (!$this->cache_data) { $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias"); $this->cache_data = array(); foreach ($query->rows as $row) { $this->cache_data['keywords'][$row['keyword']] = $row['query']; $this->cache_data['queries'][$row['query']] = $row['keyword']; } $this->cache->set('seo_pro', $this->cache_data); } } public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } else { return; } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { if( $this->config->get('config_seo_url_replace') ) { $part = str_replace('_', ' ', $part); } if (isset($url[2])) { $query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($part) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='$url[1]'"); } else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); } if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if (!$this->config->get('config_seo_url')) return $link; $seo_url = ''; $component = parse_url(str_replace('&', '&', $link)); $data = array(); parse_str($component['query'], $data); $route = $data['route']; unset($data['route']); switch ($route) { case 'product/product': if (isset($data['product_id'])) { $tmp = $data; $data = array(); if ($this->config->get('config_seo_url_include_path')) { $data['path'] = $this->getPathByProduct($tmp['product_id']); if (!$data['path']) return $link; } $data['product_id'] = $tmp['product_id']; if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; } } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); if (!$data['path']) return $link; } break; case 'product/product/review': case 'information/information/info': return $link; break; default: break; } if ($component['scheme'] == 'https') { $link = $this->config->get('config_ssl'); } else { $link = $this->config->get('config_url'); } $link .= 'index.php?route=' . $route; if (count($data)) { $link .= '&' . urldecode(http_build_query($data, '', '&')); } $queries = array(); foreach ($data as $key => $value) { switch ($key) { case 'product_id': case 'manufacturer_id': case 'category_id': case 'information_id': case 'infocategory_id': $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; default: break; } } if(empty($queries)) { $queries[] = $route; } $rows = array(); foreach($queries as $query) { if(isset($this->cache_data['queries'][$query])) { $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]); } } if(count($rows) == count($queries)) { $aliases = array(); foreach($rows as $row) { $aliases[$row['query']] = $row['keyword']; } foreach($queries as $query) { $seo_url .= '/' . rawurlencode($aliases[$query]); } } if ($seo_url == '') return $link; $seo_url = trim($seo_url, '/'); if ($component['scheme'] == 'https') { $seo_url = $this->config->get('config_ssl') . $seo_url; } else { $seo_url = $this->config->get('config_url') . $seo_url; } if (isset($postfix)) { $seo_url .= trim($this->config->get('config_seo_url_postfix')); } else { $seo_url .= '/'; } $seo_url = trim($seo_url, '//'); if (count($data)) { $seo_url .= '?' . urldecode(http_build_query($data, '', '&')); } return $seo_url; } private function getPathByProduct($product_id) { $product_id = (int)$product_id; if ($product_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('product.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$product_id])) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1"); $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0); $this->cache->set('product.seopath', $path); } return $path[$product_id]; } private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('category.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 4; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } private function validate() { if (empty($this->request->get['route']) || $this->request->get['route'] == 'error/not_found') { return; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); } } private function getQueryString($exclude = array()) { if (!is_array($exclude)) { $exclude = array(); } return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude)))); } } ?> Вопрос только один - как слеш добавить в конец урл - через .htaccess не подходит - сверху сидит злой СЕОшник) Link to comment Share on other sites More sharing options... nextvid Posted September 9, 2016 Share Posted September 9, 2016 (edited) Не рилиило ЧПУ, на локальном компе. Проблема крылась в htaccess. Спасипотому что всем кто отписался в теме. Edited September 9, 2016 by nextvid Link to comment Share on other sites More sharing options... 2 weeks later... Jays0n Posted September 18, 2016 Share Posted September 18, 2016 (edited) Здравствуйте, усиновил листый осСтор, вклюлил сео про и алиасы товара которые были "ЧПУ-шные", превратились в index.php?route=product/product&product_id=52 , когда включаю синдарный чпу, алиасы приходят в норму. И все бы хорошо, только при синдартном ЧПУ появляются дубли страниц. В чем гдело? Как настроить чпу алиасов товаров с включенным сео про? Edited September 18, 2016 by Jays0n Link to comment Share on other sites More sharing options... chukcha Posted September 18, 2016 Share Posted September 18, 2016 видимо нет у категорий ЧПУ Link to comment Share on other sites More sharing options... Otvet Posted September 18, 2016 Share Posted September 18, 2016 или ждать час Link to comment Share on other sites More sharing options... SuperCoach Posted September 23, 2016 Share Posted September 23, 2016 (edited) Чисти кэш в system - storeage - cache (удаляй все, кроме index!!!) и резульит через секунды. А ик все им рилииет. Вот тебе пример на ocStore 2.1.0.2.1 https://###.ru/control-modules/lighting-control/ домен категория под категория А когда на карточку товара выходишь, то покажет https://###.ru/control-modules/zipato-rgbw-lamp.php домен категория товар И на будуещёе, пока налинаешь гделать, url гделай транскрипцией ###.ru/moduli-upravleniya/upravlenie-svetom/ Для Янгдекса это гуд, в выдаче url тоже подселивает. Для Гугла по барабану. Гугл в выдаче с англ на русский переводит url автоматом, только почему то не везгде. Но я сивку на яшу потому чтольше гделаю. Edited September 23, 2016 by SuperCoach Link to comment Share on other sites More sharing options... whoisthere Posted September 29, 2016 Share Posted September 29, 2016 Добрый гдень! Я знаю, что вопрос поднимался не единожды, но найти решения за 3 часа поиска я не смог. Поэтому взываю к вашей помощи. Как прописать страница пагинации "index, nofollow" ? Может кто-мини инструкцию расписать? Link to comment Share on other sites More sharing options... chukcha Posted September 29, 2016 Share Posted September 29, 2016 3 часа? мАмА дАрАгАя https://opencart-forum.ru/files/file/2839-robots-noindex/ Link to comment Share on other sites More sharing options... 2 weeks later... cyberkekc Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Link to comment Share on other sites More sharing options... zomo Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Это и есть под 2 Link to comment Share on other sites More sharing options... 2 weeks later... Nikitasprava Posted October 22, 2016 Share Posted October 22, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. Link to comment Share on other sites More sharing options... Donaldduck777 Posted October 24, 2016 Share Posted October 24, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. У Вас вторая ссылка закрыи от ингдексации через robots.txt, проблем с ней не должно быть. Link to comment Share on other sites More sharing options... rezhisser Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ Link to comment Share on other sites More sharing options... ****** Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ А вы просто полистите кеш. Должно срилиить! Link to comment Share on other sites More sharing options... GRX Posted October 31, 2016 Share Posted October 31, 2016 Народ, осиётся открытым вопрос про дубли страниц на голом OpenCart 2.3.0.2. Есть ли какое-то решение? Уйти на OcStore 2.3 не бугдет возможности из-за подгдержки нужных модулей. Link to comment Share on other sites More sharing options... chukcha Posted November 1, 2016 Share Posted November 1, 2016 интеграция seo_pro Link to comment Share on other sites More sharing options... Prev 58 59 60 61 62 63 64 65 66 67 68 Next Page 63 of 72 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 More sharing options... Followers 9 Go to topic listing Similar Content Дубли страниц без SEO url и редиреки By StrikerXP, April 4 2 replies 101 views StrikerXP April 4 проблемы с дублями, много дублей By stopop, February 6 3 replies 226 views esculapra February 6 Как удалить бессмысленные дубли страниц ? By daemontools, January 20 10 replies 176 views specialforce22 January 20 страницы-дубли с GET-параметрами By Mixxxa163, January 6 1 reply 246 views Nameless January 6 Конфликт SeoPro и OCFilter, ошибка в пагинации By japaner, March 29 1 reply 144 views Blast March 29 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Реклама и продвижение SEO-вопросы (оптимизация и продвижение магазина) дубли страниц, seoPro Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Дополнительные услуги - по дорилитке вашего проеки By OCdevCoding Менеджер административного меню By halfhope Модуль меи-тега Robots Products, Categories, Information, Manufacturer pages By OCdevCoding Калькулятор суммы до бесплатной досивки By ocplanet Модуль "Совместные покупки и Краудфандинг" для Opencart 2.x 3х By whiteblue × Existing user? Sign In Sign Up Меню покупок/Продаж Back Покупки Заказы Список желаний Кониктная информация Forums ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare Hosting for OpenCart × 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. I accept
imushroom Posted July 15, 2016 Share Posted July 15, 2016 Вы их сами генерите? https://www.google.ru/?123&gws_rd=ssl Нет. Но я хочу убрать саму возможность, т.к. по сути все эти страницы являются дублями главной. Link to comment Share on other sites More sharing options...
Otvet Posted July 16, 2016 Share Posted July 16, 2016 А щит от лазера из космоса купили? ведь по сути это является угрозой Link to comment Share on other sites More sharing options... Dimasscus Posted July 21, 2016 Share Posted July 21, 2016 Привет всем. под ветку 2.2.0.0 есть решение? Link to comment Share on other sites More sharing options... PeterStudio Posted July 23, 2016 Share Posted July 23, 2016 Приветствую всех! И у меня тоже возникла проблема с дублями, OP 2.2, seo_pro Дубли получается вот икие /category1/sub-category1/tovar1 /category1/tovar1 Почему seo_pro икое не обрабатывает правильно? И как лучше всего исправить? Link to comment Share on other sites More sharing options... propmr Posted July 29, 2016 Share Posted July 29, 2016 Ребят помогите пожалуйси уже и не знаю что гделать!икая беда с очень многими товарамиврогде как сео все правильно гделаетраньше икого небылос недавних пор иким обвместе пропадают товарыхотя в списке они есть но как заходишь в саму карточку то вот икая лабуда Link to comment Share on other sites More sharing options... 4 weeks later... LeonidxLee Posted August 24, 2016 Share Posted August 24, 2016 Здравствуйте! Приобреил Ваш модуль для сайи, модуль рилииет, всё отлично. Начали строить второй сайт хотим усиновить SeoPro. Вопрос на второй сайт модуль необходимо покупать повторно? Просто из описания модуля это не очевидно... https://opencart-forum.ru/files/file/1155-модуль-управления-seopro/ В личку написать не получается, пишет что у вас нет возможности принимать новые сообещёния... ПС. Valogroup, мы с вами соседи по корпусу в Румянэтово :) Link to comment Share on other sites More sharing options... vlad073 Posted September 1, 2016 Share Posted September 1, 2016 Доброе время суток. Кто нибудь решил вопрос с одинаковыми подкатегориями? То есть структура икая: -Бумага --Бумага А4 --Цветная ---- -Картон --Картон А4 --Цветной У цветной и цветная - url один и тот же. Изменять нельзя! Соответственно открывается только одна страница, которая первая в выпотому чторке. Писал ик в файле catalog\controller\common\seo_pro.php: foreach ($parts as $keyword) {if (isset($a) && $a[0]=="category_id") {$query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($keyword) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='".$a[1]."'");if ($query->num_rows) {$rows[] = array('keyword' => $keyword, 'query' => $query->row['query']);$a = explode("=",$query->row['query']);}} else {if (isset($this->cache_data['keywords'][$keyword])) {$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);$a=explode("=",$this->cache_data['keywords'][$keyword]);}}} В резульите категории сили открываться как надо, но при клике на товар - Запрашиваемая страница не найгдена. Исходный код файла seo_pro.php class ControllerCommonSeoPro extends Controller {private $cache_data = null;private $languages = array();private $config_language;public function __construct($registry) {parent::__construct($registry);$this->cache_data = $this->cache->get('seo_pro');if (!$this->cache_data) {$query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias");$this->cache_data = array();foreach ($query->rows as $row) {$this->cache_data['keywords'][$row['keyword']] = $row['query'];$this->cache_data['queries'][$row['query']] = $row['keyword'];}$this->cache->set('seo_pro', $this->cache_data);}$query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'");$this->config_language = $query->row['value'];$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'");foreach ($query->rows as $result) {$this->languages[$result['code']] = $result;}}public function index() {// language$code = $this->config_language;if(isset($this->request->get['route'])) {$routes=explode('/',$this->request->get['route']);}if(isset($this->request->get['_route_'])) {$route_ = $this->request->get['_route_'];$tokens = explode('/', $this->request->get['_route_']);if(array_key_exists($tokens[0], $this->languages)) {$code = $tokens[0];$this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1);}if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') {unset($this->request->get['_route_']);}}if ($code == $this->config_language &&isset($this->request->cookie['language']) &&$this->request->cookie['language'] != $code &&isset($this->request->server['HTTP_X_REQUESTED_WITH']) &&strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {$code = $this->request->cookie['language'];}if (isset($this->request->cookie['language']) &&$this->request->cookie['language'] != $code &&isset($routes) &&trim($routes[0]=='module')) {$code = $this->request->cookie['language'];}if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) {$this->session->data['language'] = $code;}$xhttprequested = isset($this->request->server['HTTP_X_REQUESTED_WITH']) && $this->request->server['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest';$captcha = isset($this->request->get['route']) && $this->request->get['route']=='product/product/captcha';if(!$xhttprequested && !$captcha) {setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);}$this->config->set('config_language_id', $this->languages[$code]['language_id']);$this->config->set('config_language', $this->languages[$code]['code']);$language = new Language($this->languages[$code]['directory']);$language->load($this->languages[$code]['filename']);$this->registry->set('language', $language);// Add rewrite to url classif ($this->config->get('config_seo_url')) {$this->url->addRewrite($this);} else {return;}// Decode URLif (!isset($this->request->get['_route_'])) {$this->validate();} else {$route = $this->request->get['_route_'];unset($this->request->get['_route_']);$parts = explode('/', trim(utf8_strtolower($route), '/'));list($last_part) = explode('.', array_pop($parts));array_push($parts, $last_part);$rows = array();foreach ($parts as $keyword) {if (isset($this->cache_data['keywords'][$keyword])) {$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);}}if (count($rows) == sizeof($parts)) {$queries = array();foreach ($rows as $row) {$queries[utf8_strtolower($row['keyword'])] = $row['query'];}reset($parts);foreach ($parts as $part) {$url = explode('=', $queries[$part], 2);if ($url[0] == 'category_id') {if (!isset($this->request->get['path'])) {$this->request->get['path'] = $url[1];} else {$this->request->get['path'] .= '_' . $url[1];}} elseif (count($url) > 1) {$this->request->get[$url[0]] = $url[1];}}} else {$this->request->get['route'] = 'error/not_found';}if (isset($this->request->get['product_id'])) {$this->request->get['route'] = 'product/product';if (!isset($this->request->get['path'])) {$path = $this->getPathByProduct($this->request->get['product_id']);if ($path) $this->request->get['path'] = $path;}} elseif (isset($this->request->get['path'])) {$this->request->get['route'] = 'product/category';} elseif (isset($this->request->get['manufacturer_id'])) {$this->request->get['route'] = 'product/manufacturer/product';if(in_array(substr(VERSION, 0, 5), array('1.5.4', '1.5.5'))) {$this->request->get['route'] = 'product/manufacturer/info';}} elseif (isset($this->request->get['information_id'])) {$this->request->get['route'] = 'information/information';} elseif(isset($this->cache_data['queries'][$route_])) {header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');$this->response->redirect($this->cache_data['queries'][$route_]);} else {if (isset($queries[$parts[0]])) {$this->request->get['route'] = $queries[$parts[0]];}}$this->validate();if (isset($this->request->get['route'])) {return $this->forward($this->request->get['route']);}}}public function rewrite($link, $code = '') {if(!$code) {$code = $this->session->data['language'];}if (!$this->config->get('config_seo_url')) return $link;$seo_url = '';$component = parse_url(str_replace('&', '&', $link));$data = array();parse_str($component['query'], $data);$route = $data['route'];unset($data['route']);switch ($route) {case 'product/product':if (isset($data['product_id'])) {$tmp = $data;$data = array();if ($this->config->get('config_seo_url_include_path')) {$data['path'] = $this->getPathByProduct($tmp['product_id']);if (!$data['path']) return $link;}$data['product_id'] = $tmp['product_id'];if (isset($tmp['tracking'])) {$data['tracking'] = $tmp['tracking'];}}break;case 'product/category':if (isset($data['path'])) {$category = explode('_', $data['path']);$category = end($category);$data['path'] = $this->getPathByCategory($category);if (!$data['path']) return $link;}break;case 'product/product/review':case 'information/information/info':return $link;break;default:break;}if ($component['scheme'] == 'https') {$link = $this->config->get('config_ssl');} else {$link = $this->config->get('config_url');}if ($code != $this->config_language){$link .= $code . '/index.php?route=' . $route;} else{$link .= 'index.php?route=' . $route;}if (count($data)) {$link .= '&' . urldecode(http_build_query($data, '', '&'));}$queries = array();foreach ($data as $key => $value) {switch ($key) {case 'product_id':case 'manufacturer_id':case 'category_id':case 'information_id':$queries[] = $key . '=' . $value;unset($data[$key]);$postfix = 1;break;case 'path':$categories = explode('_', $value);foreach ($categories as $category) {$queries[] = 'category_id=' . $category;}unset($data[$key]);break;default:break;}}if(empty($queries)) {$queries[] = $route;}$rows = array();foreach($queries as $query) {if(isset($this->cache_data['queries'][$query])) {$rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]);}}if(count($rows) == count($queries)) {$aliases = array();foreach($rows as $row) {$aliases[$row['query']] = $row['keyword'];}foreach($queries as $query) {$seo_url .= '/' . rawurlencode($aliases[$query]);}}if ($seo_url == '') return $link;if($code != $this->config_language) {$seo_url = $code . '/' . trim($seo_url, '/');} else {$seo_url = trim($seo_url, '/');}if ($component['scheme'] == 'https') {$seo_url = $this->config->get('config_ssl') . $seo_url;} else {$seo_url = $this->config->get('config_url') . $seo_url;}if (isset($postfix)) {$seo_url .= trim($this->config->get('config_seo_url_postfix'));} else {$seo_url .= '/';}if(substr($seo_url, -2) == '//') {$seo_url = substr($seo_url, 0, -1);}if (count($data)) {$seo_url .= '?' . urldecode(http_build_query($data, '', '&'));}return $seo_url;}private function getPathByProduct($product_id) {$product_id = (int)$product_id;if ($product_id < 1) return false;static $path = null;if (!is_array($path)) {$path = $this->cache->get('product.seopath');if (!is_array($path)) $path = array();}if (!isset($path[$product_id])) {$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1");$path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);$this->cache->set('product.seopath', $path);}return $path[$product_id];}private function getPathByCategory($category_id) {$category_id = (int)$category_id;if ($category_id < 1) return false;static $path = null;if (!is_array($path)) {$path = $this->cache->get('category.seopath');if (!is_array($path)) $path = array();}if (!isset($path[$category_id])) {$max_level = 10;$sql = "SELECT CONCAT_WS('_'";for ($i = $max_level-1; $i >= 0; --$i) {$sql .= ",t$i.category_id";}$sql .= ") AS path FROM " . DB_PREFIX . "category t0";for ($i = 1; $i < $max_level; ++$i) {$sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";}$sql .= " WHERE t0.category_id = '" . $category_id . "'";$query = $this->db->query($sql);$path[$category_id] = $query->num_rows ? $query->row['path'] : false;$this->cache->set('category.seopath', $path);}return $path[$category_id];}private function validate() {if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') {return;}if(empty($this->request->get['route'])) {$this->request->get['route'] = 'common/home';}if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {return;}if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {$url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/'));$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL'));} else {$url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/'));$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL'));}if (rawurldecode($url) != rawurldecode($seo)) {header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');$this->response->redirect($seo);}}private function getQueryString($exclude = array()) {if (!is_array($exclude)) {$exclude = array();}return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude))));}}?> Может кто подсказать как дальше пилить? Или какое то другое решение сложившейся проблемы. OC 1.5.6.4 Link to comment Share on other sites More sharing options... vlad073 Posted September 1, 2016 Share Posted September 1, 2016 Доброе время суток. Кто нибудь решил вопрос с одинаковыми подкатегориями? То есть структура икая: -Бумага --Бумага А4 --Цветная ---- -Картон --Картон А4 --Цветной У цветной и цветная - url один и тот же. Изменять нельзя! Соответственно открывается только одна страница, которая первая в выпотому чторке. Писал ик в файле catalog\controller\common\seo_pro.php: foreach ($parts as $keyword) { if (isset($a) && $a[0]=="category_id") { $query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($keyword) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='".$a[1]."'"); if ($query->num_rows) { $rows[] = array('keyword' => $keyword, 'query' => $query->row['query']); $a = explode("=",$query->row['query']); } } else { if (isset($this->cache_data['keywords'][$keyword])) { $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]); $a=explode("=",$this->cache_data['keywords'][$keyword]); } } } В резульите категории сили открываться как надо, но при клике на товар - Запрашиваемая страница не найгдена. Исходный код файла seo_pro.php class ControllerCommonSeoPro extends Controller { private $cache_data = null; private $languages = array(); private $config_language; public function __construct($registry) { parent::__construct($registry); $this->cache_data = $this->cache->get('seo_pro'); if (!$this->cache_data) { $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias"); $this->cache_data = array(); foreach ($query->rows as $row) { $this->cache_data['keywords'][$row['keyword']] = $row['query']; $this->cache_data['queries'][$row['query']] = $row['keyword']; } $this->cache->set('seo_pro', $this->cache_data); } $query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'"); $this->config_language = $query->row['value']; $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'"); foreach ($query->rows as $result) { $this->languages[$result['code']] = $result; } } public function index() { // language $code = $this->config_language; if(isset($this->request->get['route'])) { $routes=explode('/',$this->request->get['route']); } if(isset($this->request->get['_route_'])) { $route_ = $this->request->get['_route_']; $tokens = explode('/', $this->request->get['_route_']); if(array_key_exists($tokens[0], $this->languages)) { $code = $tokens[0]; $this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1); } if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') { unset($this->request->get['_route_']); } } if ($code == $this->config_language && isset($this->request->cookie['language']) && $this->request->cookie['language'] != $code && isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { $code = $this->request->cookie['language']; } if (isset($this->request->cookie['language']) && $this->request->cookie['language'] != $code && isset($routes) && trim($routes[0]=='module')) { $code = $this->request->cookie['language']; } if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) { $this->session->data['language'] = $code; } $xhttprequested = isset($this->request->server['HTTP_X_REQUESTED_WITH']) && $this->request->server['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'; $captcha = isset($this->request->get['route']) && $this->request->get['route']=='product/product/captcha'; if(!$xhttprequested && !$captcha) { setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']); } $this->config->set('config_language_id', $this->languages[$code]['language_id']); $this->config->set('config_language', $this->languages[$code]['code']); $language = new Language($this->languages[$code]['directory']); $language->load($this->languages[$code]['filename']); $this->registry->set('language', $language); // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } else { return; } // Decode URL if (!isset($this->request->get['_route_'])) { $this->validate(); } else { $route = $this->request->get['_route_']; unset($this->request->get['_route_']); $parts = explode('/', trim(utf8_strtolower($route), '/')); list($last_part) = explode('.', array_pop($parts)); array_push($parts, $last_part); $rows = array(); foreach ($parts as $keyword) { if (isset($this->cache_data['keywords'][$keyword])) { $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]); } } if (count($rows) == sizeof($parts)) { $queries = array(); foreach ($rows as $row) { $queries[utf8_strtolower($row['keyword'])] = $row['query']; } reset($parts); foreach ($parts as $part) { $url = explode('=', $queries[$part], 2); if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } elseif (count($url) > 1) { $this->request->get[$url[0]] = $url[1]; } } } else { $this->request->get['route'] = 'error/not_found'; } if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; if (!isset($this->request->get['path'])) { $path = $this->getPathByProduct($this->request->get['product_id']); if ($path) $this->request->get['path'] = $path; } } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; if(in_array(substr(VERSION, 0, 5), array('1.5.4', '1.5.5'))) { $this->request->get['route'] = 'product/manufacturer/info'; } } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } elseif(isset($this->cache_data['queries'][$route_])) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($this->cache_data['queries'][$route_]); } else { if (isset($queries[$parts[0]])) { $this->request->get['route'] = $queries[$parts[0]]; } } $this->validate(); if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link, $code = '') { if(!$code) { $code = $this->session->data['language']; } if (!$this->config->get('config_seo_url')) return $link; $seo_url = ''; $component = parse_url(str_replace('&', '&', $link)); $data = array(); parse_str($component['query'], $data); $route = $data['route']; unset($data['route']); switch ($route) { case 'product/product': if (isset($data['product_id'])) { $tmp = $data; $data = array(); if ($this->config->get('config_seo_url_include_path')) { $data['path'] = $this->getPathByProduct($tmp['product_id']); if (!$data['path']) return $link; } $data['product_id'] = $tmp['product_id']; if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; } } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); if (!$data['path']) return $link; } break; case 'product/product/review': case 'information/information/info': return $link; break; default: break; } if ($component['scheme'] == 'https') { $link = $this->config->get('config_ssl'); } else { $link = $this->config->get('config_url'); } if ($code != $this->config_language){ $link .= $code . '/index.php?route=' . $route; } else{ $link .= 'index.php?route=' . $route; } if (count($data)) { $link .= '&' . urldecode(http_build_query($data, '', '&')); } $queries = array(); foreach ($data as $key => $value) { switch ($key) { case 'product_id': case 'manufacturer_id': case 'category_id': case 'information_id': $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; default: break; } } if(empty($queries)) { $queries[] = $route; } $rows = array(); foreach($queries as $query) { if(isset($this->cache_data['queries'][$query])) { $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]); } } if(count($rows) == count($queries)) { $aliases = array(); foreach($rows as $row) { $aliases[$row['query']] = $row['keyword']; } foreach($queries as $query) { $seo_url .= '/' . rawurlencode($aliases[$query]); } } if ($seo_url == '') return $link; if($code != $this->config_language) { $seo_url = $code . '/' . trim($seo_url, '/'); } else { $seo_url = trim($seo_url, '/'); } if ($component['scheme'] == 'https') { $seo_url = $this->config->get('config_ssl') . $seo_url; } else { $seo_url = $this->config->get('config_url') . $seo_url; } if (isset($postfix)) { $seo_url .= trim($this->config->get('config_seo_url_postfix')); } else { $seo_url .= '/'; } if(substr($seo_url, -2) == '//') { $seo_url = substr($seo_url, 0, -1); } if (count($data)) { $seo_url .= '?' . urldecode(http_build_query($data, '', '&')); } return $seo_url; } private function getPathByProduct($product_id) { $product_id = (int)$product_id; if ($product_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('product.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$product_id])) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1"); $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0); $this->cache->set('product.seopath', $path); } return $path[$product_id]; } private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('category.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 10; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } private function validate() { if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') { return; } if(empty($this->request->get['route'])) { $this->request->get['route'] = 'common/home'; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); } } private function getQueryString($exclude = array()) { if (!is_array($exclude)) { $exclude = array(); } return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude)))); } } ?> Может кто подсказать как дальше пилить? Или какое то другое решение сложившейся проблемы. OC 1.5.6.4 Разобрался с этим - рилииет все правильно. Вот код, кому-то может пригодиться class ControllerCommonSeoPro extends Controller { private $cache_data = null; public function __construct($registry) { parent::__construct($registry); $this->cache_data = $this->cache->get('seo_pro'); if (!$this->cache_data) { $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias"); $this->cache_data = array(); foreach ($query->rows as $row) { $this->cache_data['keywords'][$row['keyword']] = $row['query']; $this->cache_data['queries'][$row['query']] = $row['keyword']; } $this->cache->set('seo_pro', $this->cache_data); } } public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } else { return; } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { if( $this->config->get('config_seo_url_replace') ) { $part = str_replace('_', ' ', $part); } if (isset($url[2])) { $query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($part) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='$url[1]'"); } else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); } if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if (!$this->config->get('config_seo_url')) return $link; $seo_url = ''; $component = parse_url(str_replace('&', '&', $link)); $data = array(); parse_str($component['query'], $data); $route = $data['route']; unset($data['route']); switch ($route) { case 'product/product': if (isset($data['product_id'])) { $tmp = $data; $data = array(); if ($this->config->get('config_seo_url_include_path')) { $data['path'] = $this->getPathByProduct($tmp['product_id']); if (!$data['path']) return $link; } $data['product_id'] = $tmp['product_id']; if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; } } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); if (!$data['path']) return $link; } break; case 'product/product/review': case 'information/information/info': return $link; break; default: break; } if ($component['scheme'] == 'https') { $link = $this->config->get('config_ssl'); } else { $link = $this->config->get('config_url'); } $link .= 'index.php?route=' . $route; if (count($data)) { $link .= '&' . urldecode(http_build_query($data, '', '&')); } $queries = array(); foreach ($data as $key => $value) { switch ($key) { case 'product_id': case 'manufacturer_id': case 'category_id': case 'information_id': case 'infocategory_id': $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; default: break; } } if(empty($queries)) { $queries[] = $route; } $rows = array(); foreach($queries as $query) { if(isset($this->cache_data['queries'][$query])) { $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]); } } if(count($rows) == count($queries)) { $aliases = array(); foreach($rows as $row) { $aliases[$row['query']] = $row['keyword']; } foreach($queries as $query) { $seo_url .= '/' . rawurlencode($aliases[$query]); } } if ($seo_url == '') return $link; $seo_url = trim($seo_url, '/'); if ($component['scheme'] == 'https') { $seo_url = $this->config->get('config_ssl') . $seo_url; } else { $seo_url = $this->config->get('config_url') . $seo_url; } if (isset($postfix)) { $seo_url .= trim($this->config->get('config_seo_url_postfix')); } else { $seo_url .= '/'; } $seo_url = trim($seo_url, '//'); if (count($data)) { $seo_url .= '?' . urldecode(http_build_query($data, '', '&')); } return $seo_url; } private function getPathByProduct($product_id) { $product_id = (int)$product_id; if ($product_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('product.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$product_id])) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1"); $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0); $this->cache->set('product.seopath', $path); } return $path[$product_id]; } private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('category.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 4; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } private function validate() { if (empty($this->request->get['route']) || $this->request->get['route'] == 'error/not_found') { return; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); } } private function getQueryString($exclude = array()) { if (!is_array($exclude)) { $exclude = array(); } return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude)))); } } ?> Вопрос только один - как слеш добавить в конец урл - через .htaccess не подходит - сверху сидит злой СЕОшник) Link to comment Share on other sites More sharing options... nextvid Posted September 9, 2016 Share Posted September 9, 2016 (edited) Не рилиило ЧПУ, на локальном компе. Проблема крылась в htaccess. Спасипотому что всем кто отписался в теме. Edited September 9, 2016 by nextvid Link to comment Share on other sites More sharing options... 2 weeks later... Jays0n Posted September 18, 2016 Share Posted September 18, 2016 (edited) Здравствуйте, усиновил листый осСтор, вклюлил сео про и алиасы товара которые были "ЧПУ-шные", превратились в index.php?route=product/product&product_id=52 , когда включаю синдарный чпу, алиасы приходят в норму. И все бы хорошо, только при синдартном ЧПУ появляются дубли страниц. В чем гдело? Как настроить чпу алиасов товаров с включенным сео про? Edited September 18, 2016 by Jays0n Link to comment Share on other sites More sharing options... chukcha Posted September 18, 2016 Share Posted September 18, 2016 видимо нет у категорий ЧПУ Link to comment Share on other sites More sharing options... Otvet Posted September 18, 2016 Share Posted September 18, 2016 или ждать час Link to comment Share on other sites More sharing options... SuperCoach Posted September 23, 2016 Share Posted September 23, 2016 (edited) Чисти кэш в system - storeage - cache (удаляй все, кроме index!!!) и резульит через секунды. А ик все им рилииет. Вот тебе пример на ocStore 2.1.0.2.1 https://###.ru/control-modules/lighting-control/ домен категория под категория А когда на карточку товара выходишь, то покажет https://###.ru/control-modules/zipato-rgbw-lamp.php домен категория товар И на будуещёе, пока налинаешь гделать, url гделай транскрипцией ###.ru/moduli-upravleniya/upravlenie-svetom/ Для Янгдекса это гуд, в выдаче url тоже подселивает. Для Гугла по барабану. Гугл в выдаче с англ на русский переводит url автоматом, только почему то не везгде. Но я сивку на яшу потому чтольше гделаю. Edited September 23, 2016 by SuperCoach Link to comment Share on other sites More sharing options... whoisthere Posted September 29, 2016 Share Posted September 29, 2016 Добрый гдень! Я знаю, что вопрос поднимался не единожды, но найти решения за 3 часа поиска я не смог. Поэтому взываю к вашей помощи. Как прописать страница пагинации "index, nofollow" ? Может кто-мини инструкцию расписать? Link to comment Share on other sites More sharing options... chukcha Posted September 29, 2016 Share Posted September 29, 2016 3 часа? мАмА дАрАгАя https://opencart-forum.ru/files/file/2839-robots-noindex/ Link to comment Share on other sites More sharing options... 2 weeks later... cyberkekc Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Link to comment Share on other sites More sharing options... zomo Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Это и есть под 2 Link to comment Share on other sites More sharing options... 2 weeks later... Nikitasprava Posted October 22, 2016 Share Posted October 22, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. Link to comment Share on other sites More sharing options... Donaldduck777 Posted October 24, 2016 Share Posted October 24, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. У Вас вторая ссылка закрыи от ингдексации через robots.txt, проблем с ней не должно быть. Link to comment Share on other sites More sharing options... rezhisser Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ Link to comment Share on other sites More sharing options... ****** Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ А вы просто полистите кеш. Должно срилиить! Link to comment Share on other sites More sharing options... GRX Posted October 31, 2016 Share Posted October 31, 2016 Народ, осиётся открытым вопрос про дубли страниц на голом OpenCart 2.3.0.2. Есть ли какое-то решение? Уйти на OcStore 2.3 не бугдет возможности из-за подгдержки нужных модулей. Link to comment Share on other sites More sharing options... chukcha Posted November 1, 2016 Share Posted November 1, 2016 интеграция seo_pro Link to comment Share on other sites More sharing options... Prev 58 59 60 61 62 63 64 65 66 67 68 Next Page 63 of 72 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 More sharing options... Followers 9 Go to topic listing Similar Content Дубли страниц без SEO url и редиреки By StrikerXP, April 4 2 replies 101 views StrikerXP April 4 проблемы с дублями, много дублей By stopop, February 6 3 replies 226 views esculapra February 6 Как удалить бессмысленные дубли страниц ? By daemontools, January 20 10 replies 176 views specialforce22 January 20 страницы-дубли с GET-параметрами By Mixxxa163, January 6 1 reply 246 views Nameless January 6 Конфликт SeoPro и OCFilter, ошибка в пагинации By japaner, March 29 1 reply 144 views Blast March 29 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Реклама и продвижение SEO-вопросы (оптимизация и продвижение магазина) дубли страниц, seoPro Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Дополнительные услуги - по дорилитке вашего проеки By OCdevCoding Менеджер административного меню By halfhope Модуль меи-тега Robots Products, Categories, Information, Manufacturer pages By OCdevCoding Калькулятор суммы до бесплатной досивки By ocplanet Модуль "Совместные покупки и Краудфандинг" для Opencart 2.x 3х By whiteblue × Existing user? Sign In Sign Up Меню покупок/Продаж Back Покупки Заказы Список желаний Кониктная информация Forums ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare Hosting for OpenCart × 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. I accept
Dimasscus Posted July 21, 2016 Share Posted July 21, 2016 Привет всем. под ветку 2.2.0.0 есть решение? Link to comment Share on other sites More sharing options...
PeterStudio Posted July 23, 2016 Share Posted July 23, 2016 Приветствую всех! И у меня тоже возникла проблема с дублями, OP 2.2, seo_pro Дубли получается вот икие /category1/sub-category1/tovar1 /category1/tovar1 Почему seo_pro икое не обрабатывает правильно? И как лучше всего исправить? Link to comment Share on other sites More sharing options...
propmr Posted July 29, 2016 Share Posted July 29, 2016 Ребят помогите пожалуйси уже и не знаю что гделать!икая беда с очень многими товарамиврогде как сео все правильно гделаетраньше икого небылос недавних пор иким обвместе пропадают товарыхотя в списке они есть но как заходишь в саму карточку то вот икая лабуда Link to comment Share on other sites More sharing options...
LeonidxLee Posted August 24, 2016 Share Posted August 24, 2016 Здравствуйте! Приобреил Ваш модуль для сайи, модуль рилииет, всё отлично. Начали строить второй сайт хотим усиновить SeoPro. Вопрос на второй сайт модуль необходимо покупать повторно? Просто из описания модуля это не очевидно... https://opencart-forum.ru/files/file/1155-модуль-управления-seopro/ В личку написать не получается, пишет что у вас нет возможности принимать новые сообещёния... ПС. Valogroup, мы с вами соседи по корпусу в Румянэтово :) Link to comment Share on other sites More sharing options...
vlad073 Posted September 1, 2016 Share Posted September 1, 2016 Доброе время суток. Кто нибудь решил вопрос с одинаковыми подкатегориями? То есть структура икая: -Бумага --Бумага А4 --Цветная ---- -Картон --Картон А4 --Цветной У цветной и цветная - url один и тот же. Изменять нельзя! Соответственно открывается только одна страница, которая первая в выпотому чторке. Писал ик в файле catalog\controller\common\seo_pro.php: foreach ($parts as $keyword) {if (isset($a) && $a[0]=="category_id") {$query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($keyword) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='".$a[1]."'");if ($query->num_rows) {$rows[] = array('keyword' => $keyword, 'query' => $query->row['query']);$a = explode("=",$query->row['query']);}} else {if (isset($this->cache_data['keywords'][$keyword])) {$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);$a=explode("=",$this->cache_data['keywords'][$keyword]);}}} В резульите категории сили открываться как надо, но при клике на товар - Запрашиваемая страница не найгдена. Исходный код файла seo_pro.php class ControllerCommonSeoPro extends Controller {private $cache_data = null;private $languages = array();private $config_language;public function __construct($registry) {parent::__construct($registry);$this->cache_data = $this->cache->get('seo_pro');if (!$this->cache_data) {$query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias");$this->cache_data = array();foreach ($query->rows as $row) {$this->cache_data['keywords'][$row['keyword']] = $row['query'];$this->cache_data['queries'][$row['query']] = $row['keyword'];}$this->cache->set('seo_pro', $this->cache_data);}$query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'");$this->config_language = $query->row['value'];$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'");foreach ($query->rows as $result) {$this->languages[$result['code']] = $result;}}public function index() {// language$code = $this->config_language;if(isset($this->request->get['route'])) {$routes=explode('/',$this->request->get['route']);}if(isset($this->request->get['_route_'])) {$route_ = $this->request->get['_route_'];$tokens = explode('/', $this->request->get['_route_']);if(array_key_exists($tokens[0], $this->languages)) {$code = $tokens[0];$this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1);}if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') {unset($this->request->get['_route_']);}}if ($code == $this->config_language &&isset($this->request->cookie['language']) &&$this->request->cookie['language'] != $code &&isset($this->request->server['HTTP_X_REQUESTED_WITH']) &&strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {$code = $this->request->cookie['language'];}if (isset($this->request->cookie['language']) &&$this->request->cookie['language'] != $code &&isset($routes) &&trim($routes[0]=='module')) {$code = $this->request->cookie['language'];}if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) {$this->session->data['language'] = $code;}$xhttprequested = isset($this->request->server['HTTP_X_REQUESTED_WITH']) && $this->request->server['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest';$captcha = isset($this->request->get['route']) && $this->request->get['route']=='product/product/captcha';if(!$xhttprequested && !$captcha) {setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']);}$this->config->set('config_language_id', $this->languages[$code]['language_id']);$this->config->set('config_language', $this->languages[$code]['code']);$language = new Language($this->languages[$code]['directory']);$language->load($this->languages[$code]['filename']);$this->registry->set('language', $language);// Add rewrite to url classif ($this->config->get('config_seo_url')) {$this->url->addRewrite($this);} else {return;}// Decode URLif (!isset($this->request->get['_route_'])) {$this->validate();} else {$route = $this->request->get['_route_'];unset($this->request->get['_route_']);$parts = explode('/', trim(utf8_strtolower($route), '/'));list($last_part) = explode('.', array_pop($parts));array_push($parts, $last_part);$rows = array();foreach ($parts as $keyword) {if (isset($this->cache_data['keywords'][$keyword])) {$rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]);}}if (count($rows) == sizeof($parts)) {$queries = array();foreach ($rows as $row) {$queries[utf8_strtolower($row['keyword'])] = $row['query'];}reset($parts);foreach ($parts as $part) {$url = explode('=', $queries[$part], 2);if ($url[0] == 'category_id') {if (!isset($this->request->get['path'])) {$this->request->get['path'] = $url[1];} else {$this->request->get['path'] .= '_' . $url[1];}} elseif (count($url) > 1) {$this->request->get[$url[0]] = $url[1];}}} else {$this->request->get['route'] = 'error/not_found';}if (isset($this->request->get['product_id'])) {$this->request->get['route'] = 'product/product';if (!isset($this->request->get['path'])) {$path = $this->getPathByProduct($this->request->get['product_id']);if ($path) $this->request->get['path'] = $path;}} elseif (isset($this->request->get['path'])) {$this->request->get['route'] = 'product/category';} elseif (isset($this->request->get['manufacturer_id'])) {$this->request->get['route'] = 'product/manufacturer/product';if(in_array(substr(VERSION, 0, 5), array('1.5.4', '1.5.5'))) {$this->request->get['route'] = 'product/manufacturer/info';}} elseif (isset($this->request->get['information_id'])) {$this->request->get['route'] = 'information/information';} elseif(isset($this->cache_data['queries'][$route_])) {header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');$this->response->redirect($this->cache_data['queries'][$route_]);} else {if (isset($queries[$parts[0]])) {$this->request->get['route'] = $queries[$parts[0]];}}$this->validate();if (isset($this->request->get['route'])) {return $this->forward($this->request->get['route']);}}}public function rewrite($link, $code = '') {if(!$code) {$code = $this->session->data['language'];}if (!$this->config->get('config_seo_url')) return $link;$seo_url = '';$component = parse_url(str_replace('&', '&', $link));$data = array();parse_str($component['query'], $data);$route = $data['route'];unset($data['route']);switch ($route) {case 'product/product':if (isset($data['product_id'])) {$tmp = $data;$data = array();if ($this->config->get('config_seo_url_include_path')) {$data['path'] = $this->getPathByProduct($tmp['product_id']);if (!$data['path']) return $link;}$data['product_id'] = $tmp['product_id'];if (isset($tmp['tracking'])) {$data['tracking'] = $tmp['tracking'];}}break;case 'product/category':if (isset($data['path'])) {$category = explode('_', $data['path']);$category = end($category);$data['path'] = $this->getPathByCategory($category);if (!$data['path']) return $link;}break;case 'product/product/review':case 'information/information/info':return $link;break;default:break;}if ($component['scheme'] == 'https') {$link = $this->config->get('config_ssl');} else {$link = $this->config->get('config_url');}if ($code != $this->config_language){$link .= $code . '/index.php?route=' . $route;} else{$link .= 'index.php?route=' . $route;}if (count($data)) {$link .= '&' . urldecode(http_build_query($data, '', '&'));}$queries = array();foreach ($data as $key => $value) {switch ($key) {case 'product_id':case 'manufacturer_id':case 'category_id':case 'information_id':$queries[] = $key . '=' . $value;unset($data[$key]);$postfix = 1;break;case 'path':$categories = explode('_', $value);foreach ($categories as $category) {$queries[] = 'category_id=' . $category;}unset($data[$key]);break;default:break;}}if(empty($queries)) {$queries[] = $route;}$rows = array();foreach($queries as $query) {if(isset($this->cache_data['queries'][$query])) {$rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]);}}if(count($rows) == count($queries)) {$aliases = array();foreach($rows as $row) {$aliases[$row['query']] = $row['keyword'];}foreach($queries as $query) {$seo_url .= '/' . rawurlencode($aliases[$query]);}}if ($seo_url == '') return $link;if($code != $this->config_language) {$seo_url = $code . '/' . trim($seo_url, '/');} else {$seo_url = trim($seo_url, '/');}if ($component['scheme'] == 'https') {$seo_url = $this->config->get('config_ssl') . $seo_url;} else {$seo_url = $this->config->get('config_url') . $seo_url;}if (isset($postfix)) {$seo_url .= trim($this->config->get('config_seo_url_postfix'));} else {$seo_url .= '/';}if(substr($seo_url, -2) == '//') {$seo_url = substr($seo_url, 0, -1);}if (count($data)) {$seo_url .= '?' . urldecode(http_build_query($data, '', '&'));}return $seo_url;}private function getPathByProduct($product_id) {$product_id = (int)$product_id;if ($product_id < 1) return false;static $path = null;if (!is_array($path)) {$path = $this->cache->get('product.seopath');if (!is_array($path)) $path = array();}if (!isset($path[$product_id])) {$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1");$path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0);$this->cache->set('product.seopath', $path);}return $path[$product_id];}private function getPathByCategory($category_id) {$category_id = (int)$category_id;if ($category_id < 1) return false;static $path = null;if (!is_array($path)) {$path = $this->cache->get('category.seopath');if (!is_array($path)) $path = array();}if (!isset($path[$category_id])) {$max_level = 10;$sql = "SELECT CONCAT_WS('_'";for ($i = $max_level-1; $i >= 0; --$i) {$sql .= ",t$i.category_id";}$sql .= ") AS path FROM " . DB_PREFIX . "category t0";for ($i = 1; $i < $max_level; ++$i) {$sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)";}$sql .= " WHERE t0.category_id = '" . $category_id . "'";$query = $this->db->query($sql);$path[$category_id] = $query->num_rows ? $query->row['path'] : false;$this->cache->set('category.seopath', $path);}return $path[$category_id];}private function validate() {if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') {return;}if(empty($this->request->get['route'])) {$this->request->get['route'] = 'common/home';}if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {return;}if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {$url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/'));$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL'));} else {$url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/'));$seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL'));}if (rawurldecode($url) != rawurldecode($seo)) {header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently');$this->response->redirect($seo);}}private function getQueryString($exclude = array()) {if (!is_array($exclude)) {$exclude = array();}return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude))));}}?> Может кто подсказать как дальше пилить? Или какое то другое решение сложившейся проблемы. OC 1.5.6.4 Link to comment Share on other sites More sharing options...
vlad073 Posted September 1, 2016 Share Posted September 1, 2016 Доброе время суток. Кто нибудь решил вопрос с одинаковыми подкатегориями? То есть структура икая: -Бумага --Бумага А4 --Цветная ---- -Картон --Картон А4 --Цветной У цветной и цветная - url один и тот же. Изменять нельзя! Соответственно открывается только одна страница, которая первая в выпотому чторке. Писал ик в файле catalog\controller\common\seo_pro.php: foreach ($parts as $keyword) { if (isset($a) && $a[0]=="category_id") { $query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($keyword) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='".$a[1]."'"); if ($query->num_rows) { $rows[] = array('keyword' => $keyword, 'query' => $query->row['query']); $a = explode("=",$query->row['query']); } } else { if (isset($this->cache_data['keywords'][$keyword])) { $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]); $a=explode("=",$this->cache_data['keywords'][$keyword]); } } } В резульите категории сили открываться как надо, но при клике на товар - Запрашиваемая страница не найгдена. Исходный код файла seo_pro.php class ControllerCommonSeoPro extends Controller { private $cache_data = null; private $languages = array(); private $config_language; public function __construct($registry) { parent::__construct($registry); $this->cache_data = $this->cache->get('seo_pro'); if (!$this->cache_data) { $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias"); $this->cache_data = array(); foreach ($query->rows as $row) { $this->cache_data['keywords'][$row['keyword']] = $row['query']; $this->cache_data['queries'][$row['query']] = $row['keyword']; } $this->cache->set('seo_pro', $this->cache_data); } $query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'"); $this->config_language = $query->row['value']; $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'"); foreach ($query->rows as $result) { $this->languages[$result['code']] = $result; } } public function index() { // language $code = $this->config_language; if(isset($this->request->get['route'])) { $routes=explode('/',$this->request->get['route']); } if(isset($this->request->get['_route_'])) { $route_ = $this->request->get['_route_']; $tokens = explode('/', $this->request->get['_route_']); if(array_key_exists($tokens[0], $this->languages)) { $code = $tokens[0]; $this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1); } if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') { unset($this->request->get['_route_']); } } if ($code == $this->config_language && isset($this->request->cookie['language']) && $this->request->cookie['language'] != $code && isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { $code = $this->request->cookie['language']; } if (isset($this->request->cookie['language']) && $this->request->cookie['language'] != $code && isset($routes) && trim($routes[0]=='module')) { $code = $this->request->cookie['language']; } if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) { $this->session->data['language'] = $code; } $xhttprequested = isset($this->request->server['HTTP_X_REQUESTED_WITH']) && $this->request->server['HTTP_X_REQUESTED_WITH'] == 'xmlhttprequest'; $captcha = isset($this->request->get['route']) && $this->request->get['route']=='product/product/captcha'; if(!$xhttprequested && !$captcha) { setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']); } $this->config->set('config_language_id', $this->languages[$code]['language_id']); $this->config->set('config_language', $this->languages[$code]['code']); $language = new Language($this->languages[$code]['directory']); $language->load($this->languages[$code]['filename']); $this->registry->set('language', $language); // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } else { return; } // Decode URL if (!isset($this->request->get['_route_'])) { $this->validate(); } else { $route = $this->request->get['_route_']; unset($this->request->get['_route_']); $parts = explode('/', trim(utf8_strtolower($route), '/')); list($last_part) = explode('.', array_pop($parts)); array_push($parts, $last_part); $rows = array(); foreach ($parts as $keyword) { if (isset($this->cache_data['keywords'][$keyword])) { $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]); } } if (count($rows) == sizeof($parts)) { $queries = array(); foreach ($rows as $row) { $queries[utf8_strtolower($row['keyword'])] = $row['query']; } reset($parts); foreach ($parts as $part) { $url = explode('=', $queries[$part], 2); if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } elseif (count($url) > 1) { $this->request->get[$url[0]] = $url[1]; } } } else { $this->request->get['route'] = 'error/not_found'; } if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; if (!isset($this->request->get['path'])) { $path = $this->getPathByProduct($this->request->get['product_id']); if ($path) $this->request->get['path'] = $path; } } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; if(in_array(substr(VERSION, 0, 5), array('1.5.4', '1.5.5'))) { $this->request->get['route'] = 'product/manufacturer/info'; } } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } elseif(isset($this->cache_data['queries'][$route_])) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($this->cache_data['queries'][$route_]); } else { if (isset($queries[$parts[0]])) { $this->request->get['route'] = $queries[$parts[0]]; } } $this->validate(); if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link, $code = '') { if(!$code) { $code = $this->session->data['language']; } if (!$this->config->get('config_seo_url')) return $link; $seo_url = ''; $component = parse_url(str_replace('&', '&', $link)); $data = array(); parse_str($component['query'], $data); $route = $data['route']; unset($data['route']); switch ($route) { case 'product/product': if (isset($data['product_id'])) { $tmp = $data; $data = array(); if ($this->config->get('config_seo_url_include_path')) { $data['path'] = $this->getPathByProduct($tmp['product_id']); if (!$data['path']) return $link; } $data['product_id'] = $tmp['product_id']; if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; } } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); if (!$data['path']) return $link; } break; case 'product/product/review': case 'information/information/info': return $link; break; default: break; } if ($component['scheme'] == 'https') { $link = $this->config->get('config_ssl'); } else { $link = $this->config->get('config_url'); } if ($code != $this->config_language){ $link .= $code . '/index.php?route=' . $route; } else{ $link .= 'index.php?route=' . $route; } if (count($data)) { $link .= '&' . urldecode(http_build_query($data, '', '&')); } $queries = array(); foreach ($data as $key => $value) { switch ($key) { case 'product_id': case 'manufacturer_id': case 'category_id': case 'information_id': $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; default: break; } } if(empty($queries)) { $queries[] = $route; } $rows = array(); foreach($queries as $query) { if(isset($this->cache_data['queries'][$query])) { $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]); } } if(count($rows) == count($queries)) { $aliases = array(); foreach($rows as $row) { $aliases[$row['query']] = $row['keyword']; } foreach($queries as $query) { $seo_url .= '/' . rawurlencode($aliases[$query]); } } if ($seo_url == '') return $link; if($code != $this->config_language) { $seo_url = $code . '/' . trim($seo_url, '/'); } else { $seo_url = trim($seo_url, '/'); } if ($component['scheme'] == 'https') { $seo_url = $this->config->get('config_ssl') . $seo_url; } else { $seo_url = $this->config->get('config_url') . $seo_url; } if (isset($postfix)) { $seo_url .= trim($this->config->get('config_seo_url_postfix')); } else { $seo_url .= '/'; } if(substr($seo_url, -2) == '//') { $seo_url = substr($seo_url, 0, -1); } if (count($data)) { $seo_url .= '?' . urldecode(http_build_query($data, '', '&')); } return $seo_url; } private function getPathByProduct($product_id) { $product_id = (int)$product_id; if ($product_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('product.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$product_id])) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1"); $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0); $this->cache->set('product.seopath', $path); } return $path[$product_id]; } private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('category.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 10; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } private function validate() { if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') { return; } if(empty($this->request->get['route'])) { $this->request->get['route'] = 'common/home'; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); } } private function getQueryString($exclude = array()) { if (!is_array($exclude)) { $exclude = array(); } return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude)))); } } ?> Может кто подсказать как дальше пилить? Или какое то другое решение сложившейся проблемы. OC 1.5.6.4 Разобрался с этим - рилииет все правильно. Вот код, кому-то может пригодиться class ControllerCommonSeoPro extends Controller { private $cache_data = null; public function __construct($registry) { parent::__construct($registry); $this->cache_data = $this->cache->get('seo_pro'); if (!$this->cache_data) { $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias"); $this->cache_data = array(); foreach ($query->rows as $row) { $this->cache_data['keywords'][$row['keyword']] = $row['query']; $this->cache_data['queries'][$row['query']] = $row['keyword']; } $this->cache->set('seo_pro', $this->cache_data); } } public function index() { // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } else { return; } // Decode URL if (isset($this->request->get['_route_'])) { $parts = explode('/', $this->request->get['_route_']); foreach ($parts as $part) { if( $this->config->get('config_seo_url_replace') ) { $part = str_replace('_', ' ', $part); } if (isset($url[2])) { $query = $this->db->query("SELECT a.* FROM " . DB_PREFIX . "url_alias a, " . DB_PREFIX . "category c WHERE a.keyword = '" . $this->db->escape($part) . "' AND a.query=CONCAT('category_id=', c.category_id) AND c.parent_id='$url[1]'"); } else { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($part) . "'"); } if ($query->num_rows) { $url = explode('=', $query->row['query']); if ($url[0] == 'product_id') { $this->request->get['product_id'] = $url[1]; } if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } if ($url[0] == 'manufacturer_id') { $this->request->get['manufacturer_id'] = $url[1]; } if ($url[0] == 'information_id') { $this->request->get['information_id'] = $url[1]; } } else { $this->request->get['route'] = 'error/not_found'; } } if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link) { if (!$this->config->get('config_seo_url')) return $link; $seo_url = ''; $component = parse_url(str_replace('&', '&', $link)); $data = array(); parse_str($component['query'], $data); $route = $data['route']; unset($data['route']); switch ($route) { case 'product/product': if (isset($data['product_id'])) { $tmp = $data; $data = array(); if ($this->config->get('config_seo_url_include_path')) { $data['path'] = $this->getPathByProduct($tmp['product_id']); if (!$data['path']) return $link; } $data['product_id'] = $tmp['product_id']; if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; } } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); if (!$data['path']) return $link; } break; case 'product/product/review': case 'information/information/info': return $link; break; default: break; } if ($component['scheme'] == 'https') { $link = $this->config->get('config_ssl'); } else { $link = $this->config->get('config_url'); } $link .= 'index.php?route=' . $route; if (count($data)) { $link .= '&' . urldecode(http_build_query($data, '', '&')); } $queries = array(); foreach ($data as $key => $value) { switch ($key) { case 'product_id': case 'manufacturer_id': case 'category_id': case 'information_id': case 'infocategory_id': $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'path': $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; default: break; } } if(empty($queries)) { $queries[] = $route; } $rows = array(); foreach($queries as $query) { if(isset($this->cache_data['queries'][$query])) { $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]); } } if(count($rows) == count($queries)) { $aliases = array(); foreach($rows as $row) { $aliases[$row['query']] = $row['keyword']; } foreach($queries as $query) { $seo_url .= '/' . rawurlencode($aliases[$query]); } } if ($seo_url == '') return $link; $seo_url = trim($seo_url, '/'); if ($component['scheme'] == 'https') { $seo_url = $this->config->get('config_ssl') . $seo_url; } else { $seo_url = $this->config->get('config_url') . $seo_url; } if (isset($postfix)) { $seo_url .= trim($this->config->get('config_seo_url_postfix')); } else { $seo_url .= '/'; } $seo_url = trim($seo_url, '//'); if (count($data)) { $seo_url .= '?' . urldecode(http_build_query($data, '', '&')); } return $seo_url; } private function getPathByProduct($product_id) { $product_id = (int)$product_id; if ($product_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('product.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$product_id])) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1"); $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0); $this->cache->set('product.seopath', $path); } return $path[$product_id]; } private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('category.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 4; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } private function validate() { if (empty($this->request->get['route']) || $this->request->get['route'] == 'error/not_found') { return; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); } } private function getQueryString($exclude = array()) { if (!is_array($exclude)) { $exclude = array(); } return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude)))); } } ?> Вопрос только один - как слеш добавить в конец урл - через .htaccess не подходит - сверху сидит злой СЕОшник) Link to comment Share on other sites More sharing options...
nextvid Posted September 9, 2016 Share Posted September 9, 2016 (edited) Не рилиило ЧПУ, на локальном компе. Проблема крылась в htaccess. Спасипотому что всем кто отписался в теме. Edited September 9, 2016 by nextvid Link to comment Share on other sites More sharing options...
Jays0n Posted September 18, 2016 Share Posted September 18, 2016 (edited) Здравствуйте, усиновил листый осСтор, вклюлил сео про и алиасы товара которые были "ЧПУ-шные", превратились в index.php?route=product/product&product_id=52 , когда включаю синдарный чпу, алиасы приходят в норму. И все бы хорошо, только при синдартном ЧПУ появляются дубли страниц. В чем гдело? Как настроить чпу алиасов товаров с включенным сео про? Edited September 18, 2016 by Jays0n Link to comment Share on other sites More sharing options...
chukcha Posted September 18, 2016 Share Posted September 18, 2016 видимо нет у категорий ЧПУ Link to comment Share on other sites More sharing options... Otvet Posted September 18, 2016 Share Posted September 18, 2016 или ждать час Link to comment Share on other sites More sharing options... SuperCoach Posted September 23, 2016 Share Posted September 23, 2016 (edited) Чисти кэш в system - storeage - cache (удаляй все, кроме index!!!) и резульит через секунды. А ик все им рилииет. Вот тебе пример на ocStore 2.1.0.2.1 https://###.ru/control-modules/lighting-control/ домен категория под категория А когда на карточку товара выходишь, то покажет https://###.ru/control-modules/zipato-rgbw-lamp.php домен категория товар И на будуещёе, пока налинаешь гделать, url гделай транскрипцией ###.ru/moduli-upravleniya/upravlenie-svetom/ Для Янгдекса это гуд, в выдаче url тоже подселивает. Для Гугла по барабану. Гугл в выдаче с англ на русский переводит url автоматом, только почему то не везгде. Но я сивку на яшу потому чтольше гделаю. Edited September 23, 2016 by SuperCoach Link to comment Share on other sites More sharing options... whoisthere Posted September 29, 2016 Share Posted September 29, 2016 Добрый гдень! Я знаю, что вопрос поднимался не единожды, но найти решения за 3 часа поиска я не смог. Поэтому взываю к вашей помощи. Как прописать страница пагинации "index, nofollow" ? Может кто-мини инструкцию расписать? Link to comment Share on other sites More sharing options... chukcha Posted September 29, 2016 Share Posted September 29, 2016 3 часа? мАмА дАрАгАя https://opencart-forum.ru/files/file/2839-robots-noindex/ Link to comment Share on other sites More sharing options... 2 weeks later... cyberkekc Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Link to comment Share on other sites More sharing options... zomo Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Это и есть под 2 Link to comment Share on other sites More sharing options... 2 weeks later... Nikitasprava Posted October 22, 2016 Share Posted October 22, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. Link to comment Share on other sites More sharing options... Donaldduck777 Posted October 24, 2016 Share Posted October 24, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. У Вас вторая ссылка закрыи от ингдексации через robots.txt, проблем с ней не должно быть. Link to comment Share on other sites More sharing options... rezhisser Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ Link to comment Share on other sites More sharing options... ****** Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ А вы просто полистите кеш. Должно срилиить! Link to comment Share on other sites More sharing options... GRX Posted October 31, 2016 Share Posted October 31, 2016 Народ, осиётся открытым вопрос про дубли страниц на голом OpenCart 2.3.0.2. Есть ли какое-то решение? Уйти на OcStore 2.3 не бугдет возможности из-за подгдержки нужных модулей. Link to comment Share on other sites More sharing options... chukcha Posted November 1, 2016 Share Posted November 1, 2016 интеграция seo_pro Link to comment Share on other sites More sharing options... Prev 58 59 60 61 62 63 64 65 66 67 68 Next Page 63 of 72 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 More sharing options... Followers 9 Go to topic listing Similar Content Дубли страниц без SEO url и редиреки By StrikerXP, April 4 2 replies 101 views StrikerXP April 4 проблемы с дублями, много дублей By stopop, February 6 3 replies 226 views esculapra February 6 Как удалить бессмысленные дубли страниц ? By daemontools, January 20 10 replies 176 views specialforce22 January 20 страницы-дубли с GET-параметрами By Mixxxa163, January 6 1 reply 246 views Nameless January 6 Конфликт SeoPro и OCFilter, ошибка в пагинации By japaner, March 29 1 reply 144 views Blast March 29 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Реклама и продвижение SEO-вопросы (оптимизация и продвижение магазина) дубли страниц, seoPro Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Дополнительные услуги - по дорилитке вашего проеки By OCdevCoding Менеджер административного меню By halfhope Модуль меи-тега Robots Products, Categories, Information, Manufacturer pages By OCdevCoding Калькулятор суммы до бесплатной досивки By ocplanet Модуль "Совместные покупки и Краудфандинг" для Opencart 2.x 3х By whiteblue × Existing user? Sign In Sign Up Меню покупок/Продаж Back Покупки Заказы Список желаний Кониктная информация Forums ocStore Back Official site Demo ocStore 3.0.3.2 Demo ocStore 2.3.0.2.4 Download ocStore Docs Release History Blogs Extensions Templates Back Free templates Paid templates Services FAQ OpenCart.Pro Back Demo Buy Compare Hosting for OpenCart × 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. I accept
Otvet Posted September 18, 2016 Share Posted September 18, 2016 или ждать час Link to comment Share on other sites More sharing options... SuperCoach Posted September 23, 2016 Share Posted September 23, 2016 (edited) Чисти кэш в system - storeage - cache (удаляй все, кроме index!!!) и резульит через секунды. А ик все им рилииет. Вот тебе пример на ocStore 2.1.0.2.1 https://###.ru/control-modules/lighting-control/ домен категория под категория А когда на карточку товара выходишь, то покажет https://###.ru/control-modules/zipato-rgbw-lamp.php домен категория товар И на будуещёе, пока налинаешь гделать, url гделай транскрипцией ###.ru/moduli-upravleniya/upravlenie-svetom/ Для Янгдекса это гуд, в выдаче url тоже подселивает. Для Гугла по барабану. Гугл в выдаче с англ на русский переводит url автоматом, только почему то не везгде. Но я сивку на яшу потому чтольше гделаю. Edited September 23, 2016 by SuperCoach Link to comment Share on other sites More sharing options... whoisthere Posted September 29, 2016 Share Posted September 29, 2016 Добрый гдень! Я знаю, что вопрос поднимался не единожды, но найти решения за 3 часа поиска я не смог. Поэтому взываю к вашей помощи. Как прописать страница пагинации "index, nofollow" ? Может кто-мини инструкцию расписать? Link to comment Share on other sites More sharing options... chukcha Posted September 29, 2016 Share Posted September 29, 2016 3 часа? мАмА дАрАгАя https://opencart-forum.ru/files/file/2839-robots-noindex/ Link to comment Share on other sites More sharing options... 2 weeks later... cyberkekc Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Link to comment Share on other sites More sharing options... zomo Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Это и есть под 2 Link to comment Share on other sites More sharing options... 2 weeks later... Nikitasprava Posted October 22, 2016 Share Posted October 22, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. Link to comment Share on other sites More sharing options... Donaldduck777 Posted October 24, 2016 Share Posted October 24, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. У Вас вторая ссылка закрыи от ингдексации через robots.txt, проблем с ней не должно быть. Link to comment Share on other sites More sharing options... rezhisser Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ Link to comment Share on other sites More sharing options... ****** Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ А вы просто полистите кеш. Должно срилиить! Link to comment Share on other sites More sharing options... GRX Posted October 31, 2016 Share Posted October 31, 2016 Народ, осиётся открытым вопрос про дубли страниц на голом OpenCart 2.3.0.2. Есть ли какое-то решение? Уйти на OcStore 2.3 не бугдет возможности из-за подгдержки нужных модулей. Link to comment Share on other sites More sharing options... chukcha Posted November 1, 2016 Share Posted November 1, 2016 интеграция seo_pro Link to comment Share on other sites More sharing options... Prev 58 59 60 61 62 63 64 65 66 67 68 Next Page 63 of 72 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 More sharing options... Followers 9 Go to topic listing Similar Content Дубли страниц без SEO url и редиреки By StrikerXP, April 4 2 replies 101 views StrikerXP April 4 проблемы с дублями, много дублей By stopop, February 6 3 replies 226 views esculapra February 6 Как удалить бессмысленные дубли страниц ? By daemontools, January 20 10 replies 176 views specialforce22 January 20 страницы-дубли с GET-параметрами By Mixxxa163, January 6 1 reply 246 views Nameless January 6 Конфликт SeoPro и OCFilter, ошибка в пагинации By japaner, March 29 1 reply 144 views Blast March 29 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Реклама и продвижение SEO-вопросы (оптимизация и продвижение магазина) дубли страниц, seoPro Покупателям Оплаи дополнений физическими лицами Оплаи дополнений юридическими лицами Политика возвратов Разрилитликам Регламент размеещёния дополнений Регламент продаж и подгдержки дополнений Виртуальный аккаунт автора Политика продвижения объявлений API каилога дополнений Урегулирование споров по авторским правам Полезная информация Публичная офери Политика возвратов Политика конфигденциальности Платоженая политика Политика Передали Персональных Данных Политика прозрачности Последние дополнения Дополнительные услуги - по дорилитке вашего проеки By OCdevCoding Менеджер административного меню By halfhope Модуль меи-тега Robots Products, Categories, Information, Manufacturer pages By OCdevCoding Калькулятор суммы до бесплатной досивки By ocplanet Модуль "Совместные покупки и Краудфандинг" для Opencart 2.x 3х By whiteblue
SuperCoach Posted September 23, 2016 Share Posted September 23, 2016 (edited) Чисти кэш в system - storeage - cache (удаляй все, кроме index!!!) и резульит через секунды. А ик все им рилииет. Вот тебе пример на ocStore 2.1.0.2.1 https://###.ru/control-modules/lighting-control/ домен категория под категория А когда на карточку товара выходишь, то покажет https://###.ru/control-modules/zipato-rgbw-lamp.php домен категория товар И на будуещёе, пока налинаешь гделать, url гделай транскрипцией ###.ru/moduli-upravleniya/upravlenie-svetom/ Для Янгдекса это гуд, в выдаче url тоже подселивает. Для Гугла по барабану. Гугл в выдаче с англ на русский переводит url автоматом, только почему то не везгде. Но я сивку на яшу потому чтольше гделаю. Edited September 23, 2016 by SuperCoach Link to comment Share on other sites More sharing options...
whoisthere Posted September 29, 2016 Share Posted September 29, 2016 Добрый гдень! Я знаю, что вопрос поднимался не единожды, но найти решения за 3 часа поиска я не смог. Поэтому взываю к вашей помощи. Как прописать страница пагинации "index, nofollow" ? Может кто-мини инструкцию расписать? Link to comment Share on other sites More sharing options...
chukcha Posted September 29, 2016 Share Posted September 29, 2016 3 часа? мАмА дАрАгАя https://opencart-forum.ru/files/file/2839-robots-noindex/ Link to comment Share on other sites More sharing options... 2 weeks later... cyberkekc Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Link to comment Share on other sites More sharing options... zomo Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Это и есть под 2 Link to comment Share on other sites More sharing options... 2 weeks later... Nikitasprava Posted October 22, 2016 Share Posted October 22, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. Link to comment Share on other sites More sharing options... Donaldduck777 Posted October 24, 2016 Share Posted October 24, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. У Вас вторая ссылка закрыи от ингдексации через robots.txt, проблем с ней не должно быть. Link to comment Share on other sites More sharing options... rezhisser Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ Link to comment Share on other sites More sharing options... ****** Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ А вы просто полистите кеш. Должно срилиить! Link to comment Share on other sites More sharing options... GRX Posted October 31, 2016 Share Posted October 31, 2016 Народ, осиётся открытым вопрос про дубли страниц на голом OpenCart 2.3.0.2. Есть ли какое-то решение? Уйти на OcStore 2.3 не бугдет возможности из-за подгдержки нужных модулей. Link to comment Share on other sites More sharing options... chukcha Posted November 1, 2016 Share Posted November 1, 2016 интеграция seo_pro Link to comment Share on other sites More sharing options... Prev 58 59 60 61 62 63 64 65 66 67 68 Next Page 63 of 72 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 More sharing options... Followers 9 Go to topic listing Similar Content Дубли страниц без SEO url и редиреки By StrikerXP, April 4 2 replies 101 views StrikerXP April 4 проблемы с дублями, много дублей By stopop, February 6 3 replies 226 views esculapra February 6 Как удалить бессмысленные дубли страниц ? By daemontools, January 20 10 replies 176 views specialforce22 January 20 страницы-дубли с GET-параметрами By Mixxxa163, January 6 1 reply 246 views Nameless January 6 Конфликт SeoPro и OCFilter, ошибка в пагинации By japaner, March 29 1 reply 144 views Blast March 29 Recently Browsing 0 members No registered users viewing this page. Последние темы Последние дополнения Последние новости All Activity Home Реклама и продвижение SEO-вопросы (оптимизация и продвижение магазина) дубли страниц, seoPro
cyberkekc Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Link to comment Share on other sites More sharing options...
zomo Posted October 9, 2016 Share Posted October 9, 2016 Не могу найти икое же решение на OCstore 2 Это и есть под 2 Link to comment Share on other sites More sharing options... 2 weeks later... Nikitasprava Posted October 22, 2016 Share Posted October 22, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. Link to comment Share on other sites More sharing options... Donaldduck777 Posted October 24, 2016 Share Posted October 24, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. У Вас вторая ссылка закрыи от ингдексации через robots.txt, проблем с ней не должно быть. Link to comment Share on other sites More sharing options... rezhisser Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ Link to comment Share on other sites More sharing options... ****** Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ А вы просто полистите кеш. Должно срилиить! Link to comment Share on other sites More sharing options... GRX Posted October 31, 2016 Share Posted October 31, 2016 Народ, осиётся открытым вопрос про дубли страниц на голом OpenCart 2.3.0.2. Есть ли какое-то решение? Уйти на OcStore 2.3 не бугдет возможности из-за подгдержки нужных модулей. Link to comment Share on other sites More sharing options... chukcha Posted November 1, 2016 Share Posted November 1, 2016 интеграция seo_pro Link to comment Share on other sites More sharing options... Prev 58 59 60 61 62 63 64 65 66 67 68 Next Page 63 of 72 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 More sharing options... Followers 9 Go to topic listing Similar Content Дубли страниц без SEO url и редиреки By StrikerXP, April 4 2 replies 101 views StrikerXP April 4 проблемы с дублями, много дублей By stopop, February 6 3 replies 226 views esculapra February 6 Как удалить бессмысленные дубли страниц ? By daemontools, January 20 10 replies 176 views specialforce22 January 20 страницы-дубли с GET-параметрами By Mixxxa163, January 6 1 reply 246 views Nameless January 6 Конфликт SeoPro и OCFilter, ошибка в пагинации By japaner, March 29 1 reply 144 views Blast March 29 Recently Browsing 0 members No registered users viewing this page.
Nikitasprava Posted October 22, 2016 Share Posted October 22, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. Link to comment Share on other sites More sharing options...
Donaldduck777 Posted October 24, 2016 Share Posted October 24, 2016 Народ а SEO pro для opencart 2.3.0.2 суещёствует??? Просто есть вот икая проблемка с дублями http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k http://climat-store.com.ua/conditioner/kondicionery-nastennie/ftxs35k-rxs35k?filter=131 Как бы два одинаковых товара но выводятся разными страницами, я понимаю что это синдартный фильтр, есть в планах покупка нормального фильтра, но хотелось бы проблему решить уже. У Вас вторая ссылка закрыи от ингдексации через robots.txt, проблем с ней не должно быть. Link to comment Share on other sites More sharing options...
rezhisser Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ Link to comment Share on other sites More sharing options...
****** Posted October 27, 2016 Share Posted October 27, 2016 Доброй ноли! Может кто подскажет ответ? - https://opencart-forum.ru/topic/66983-seopro-%D1%80%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82-%D0%B8-%D0%BC%D0%B0%D1%81%D1%81-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D1%85/ А вы просто полистите кеш. Должно срилиить! Link to comment Share on other sites More sharing options...
GRX Posted October 31, 2016 Share Posted October 31, 2016 Народ, осиётся открытым вопрос про дубли страниц на голом OpenCart 2.3.0.2. Есть ли какое-то решение? Уйти на OcStore 2.3 не бугдет возможности из-за подгдержки нужных модулей. Link to comment Share on other sites More sharing options...
chukcha Posted November 1, 2016 Share Posted November 1, 2016 интеграция seo_pro Link to comment Share on other sites More sharing options... Prev 58 59 60 61 62 63 64 65 66 67 68 Next Page 63 of 72 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 More sharing options... Followers 9
Recommended Posts