There is a choice of 2, so pick which one you want to use
Category Path for Canonical Link in Product Page
NOTE - This will only work if you have linked your products to 'one' category or subcategory (not both or multiple)
If your products are linked to multiple categories then it will revert back to default OC canonical ink
change canonical link from
Code: Select all
yourstore.com/product-name
Code: Select all
yourstore.com/category/subcategory/product-name
Brand Path for Canonical Link in Product Page
NOTE - This will only work if you have linked your product to a brand/manufacturer.
If you haven't, then it will revert back to default OC canonical ink
change canonical link from
Code: Select all
yourstore.com/product-name
Code: Select all
yourstore.com/brand/product-name
Category Path for Canonical Link in Product Page
Edit: catalog/controller/product/product.php
Find
Code: Select all
$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');
Code: Select all
if($this->model_catalog_product->getCategoryPath($this->request->get['product_id'])!='0'){
$this->document->addLink($this->url->link('product/product', 'path=' . $this->model_catalog_product->getCategoryPath($this->request->get['product_id']) . '&product_id=' . $this->request->get['product_id']), 'canonical');
}else{
$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');
}
find
Code: Select all
}
?>
Code: Select all
public function getCategoryPath($product_id) {
$query = $this->db->query("SELECT COUNT(product_id) AS total, category_id as catid FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
if($query->row['total']==1){
$path = array();
$path[0] = $query->row['catid'];
$query = $this->db->query("SELECT parent_id AS pid FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$path[0] . "'");
$parent = $query->row['pid'];
$p = 1;
while($parent>0){
$path[$p] = $parent;
$query = $this->db->query("SELECT parent_id AS pid FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$parent . "'");
$parent = $query->row['pid'];
$p++;
}
$path = array_reverse($path);
$fullpath = '';
foreach($path as $val){
$fullpath .= '_'.$val;
}
return ltrim($fullpath, '_');
}else{
return '0';
}
}
Brand Path for Canonical Link in Product Page
Edit: catalog/controller/product/product.php
Find
Code: Select all
$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');
Code: Select all
if($product_info['manufacturer_id']!='0'){
$this->document->addLink($this->url->link('product/product', 'manufacturer_id=' . $product_info['manufacturer_id'] . '&product_id=' . $this->request->get['product_id']), 'canonical');
}else{
$this->document->addLink($this->url->link('product/product', 'product_id=' . $this->request->get['product_id']), 'canonical');
}