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

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.

khac phuc trung seo keyword trong opencart

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ạiPhụ 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-1apple-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

 

[Total: 1   Average: 2/5]

THAM GIA NHÓM HỖ TRỢ

 
Lập trình web PHP (hoangan.net)
Nhóm Công khai · 1 thành viên
Tham gia nhóm
 

Hoàng An

Tôi không phải là 1 chuyên gia lập trình, cũng không phải là 1 chuyên gia SEO. Với niềm đam mê với CNTT, tôi có thể biến ý tưởng thành sản phẩm và thích chia sẻ kiến thức cho người khác. Nếu có duyên, mời bạn đến với khoá học của tôi