Khắc Phục Trùng SEO Keyword Trong Opencart

Vừa rồi tôi bận quá nên không có thời gian viết bài hướng dẫn các bạn về Opencart được. Trong thời gian qua tôi nhận được nhiều câu hỏi liên quan đến việc làm sao để khắc phục trùng SEO Keyword của Opencart. Qua quá trình nghiên cứu và test rất kỹ, tôi quyết định hôm nay sẽ hướng dẫn các bạn khắc phục lỗi này.
Trùng SEO Keyword Là Gì?
SEO Keyword trong Opencart chính là đường dẫn ảo ở danh mục sản phẩm. Đường dẫn ảo này giúp việc URL thân thiện với người dùng, công cụ tìm kiếm (Search Engine). Đường dẫn ảo này chỉ hoạt động khi chức năng Rewrite URL trong Opencart được kích hoạt.
Trùng SEO Keyword xảy ra khi các danh mục này được chia thành nhiều cấp mà các cấp con có tên giống nhau.
Ví dụ:
Tôi có 2 chuyên mục cha là: Điện thoại và Phụ kiện
Tôi có 2 chuyên mục con đều là: Apple
Đây là link 2 chuyên mục con:
dien-thoai/apple phu-kien/apple
Rõ ràng đây là 2 link khác nhau (Khác cha) nhưng trong Opencart không được phép làm điều này vì nó trùng SEO Keyword là apple
Nhiều người nghĩ đến cách sửa apple thành apple-1 và apple-2. Nhưng tôi khuyên các bạn không nên dùng cách này.
Các Bước Khắc Phục Trùng SEO Keyword
Có rất nhiều cách để khắc phục lỗi này, các bạn có thể sử dụng vqmod hoặc 1 số extension khác. Nhưng trong bài viết này tôi sẽ hướng dẫn cách khắc phục không sử dụng extendsion
Bước 1: Loại bỏ Validate SEO Keyword trong trang quản trị
Mặc định trong Opencart không lưu được SEO Keyword khi nó đã bị trùng (Kể cả SEO Keyword con). Việc đầu tiên các bạn phải làm cho phép lưu SEO Keyword khi bị trùng.
Đầu tiên các bạn mở file category.php trong thư mục: admin/controller/catelog/
Tìm code:
if (utf8_strlen($this->request->post['keyword']) > 0) { $this->load->model('catalog/url_alias'); $url_alias_info = $this->model_catalog_url_alias->getUrlAlias($this->request->post['keyword']); if ($url_alias_info && isset($this->request->get['category_id']) && $url_alias_info['query'] != 'category_id=' . $this->request->get['category_id']) { $this->error['keyword'] = sprintf($this->language->get('error_keyword')); } if ($url_alias_info && !isset($this->request->get['category_id'])) { $this->error['keyword'] = sprintf($this->language->get('error_keyword')); } if ($this->error && !isset($this->error['warning'])) { $this->error['warning'] = $this->language->get('error_warning'); } }
Thay thế bằng:
if (utf8_strlen($this->request->post['keyword']) > 0) { $this->load->model('catalog/url_alias'); $url_alias_info = $this->model_catalog_url_alias->getUrlAlias($this->request->post['keyword']); if ($this->error && !isset($this->error['warning'])) { $this->error['warning'] = $this->language->get('error_warning'); } }
Giờ bạn thử vào trang quản trị thêm chuyên mục với SEO Keywords bị trùng sẽ thêm được.
Bước 2: Khắc phục lỗi không hiển thị danh mục khi SEO Keyword bị trùng
Khi chúng ta để SEO Keyword bị trùng như vậy, ở ngoài frondend chúng ta chỉ xem được 1 chuyên mục mà thôi.
PS: Ý tôi đang nói là chuyên mục con có chuyên mục cha khác nhau. Nếu mà cha cũng trùng nhau thì không xem được là điều tất nhiên.
Đầu tiên các bạn mở file seo_url.php trong: catalog/controller/common/
Tìm code:
if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } }
Thay thế bằng:
if ($url[0] == 'category_id') { $categories[$i] = $this->model_catalog_category->getCategory($url[1]); if (!isset($this->request->get['path'])) { $this->request->get['path'] = $categories[$i]['category_id']; } else { foreach ($query->rows as $row) { $url = explode('=', $row['query']); $category_id = $url[1]; $category = $this->model_catalog_category->getCategory($category_id); if ($category['parent_id'] == $categories[$i - 1]['category_id']) { $this->request->get['path'] .= '_' . $category['category_id']; } } } }
Thêm code sau vào đầu phương thức index()
$this->load->model('catalog/category');
Tiếp theo, tìm code
foreach ($parts as $part) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX."url_alias WHERE keyword = '".$this->db->escape($part)."'");
Thay thế bằng:
$categories = array(); for ($i = 0; $i < count($parts); $i++) { $query = $this->db->query("SELECT * FROM ".DB_PREFIX."url_alias WHERE keyword='".$this->db->escape($parts[$i])."'");
Sau đó, bạn lưu lại và tận hưởng thành quả
Kết Luận
Trên đây là bài hướng dẫn của tôi về cách khắc phục lỗi trùng SEO Keyword bằng cách can thiệp trực tiếp vào code của Opencart.
Nếu trong quá trình thực hiện có bất kỳ lỗi nào hãy hỏi tôi trên group: https://www.facebook.com/groups/opencartvn