Article:
SEO, to_param, và tiếng Việt
1019
ngocdaothanh.myopenid.com 172Updated over 3 years ago |
Nếu không có những search engine như Google, chắc cả tỉ mạng trên trái đất này chỉ có vợ và con chó biết đến trang web của bạn là cùng. Điều này cho thấy search engine chính là Ête của Internet, và vấn đề là làm thế nào để tăng hạng trong bảng xếp hạng của search engine.
Ta sẽ tránh dùng cách bất đạo như hình dưới.

SEO là gì?
Thỉnh thoảng xem profile của một số người trên Internet, bạn thấy có người chỉ chuyên làm nghề SEO mà vẫn sống khoẻ. Vậy SEO là gi?
SEO là search engine optimization, là làm sao để nó hiểu được trang web của bạn, từ đó tăng hạng. Để SE dễ hiểu, mấu chốt là làm cho trang web càng có cấu trúc càng tốt. Đây là tiền đề của semantic web.
Hãy đọc vài bài trong bộ sưu tập của Mislav trước khi đọc tiếp.
to_param là gì?
Trong 19 mẹo lập trình viên Rails thường không biết có mẹo to_param. Hãy đọc giải thích ở trang Không đến nỗi ngu lắm và SEO on Rails.
Như các bài trong bộ sưu tập của Mislav đề cập (bạn đã đọc chưa đấy?
), URL sạch đẹp có ý nghĩa là cách hiệu quả nhất để SEO, lí do rất đơn giản là lưới nhện các trang web trỏ đến nhau bằng URL, nên bước đầu tiên của SE để tạo vị trí xếp hạng là tìm cách hiểu những từ cấu tạo nên URL. Nếu URL khó hiểu với máy, chỉ có người hoặc giời mới hiểu được thì thôi rồi
.
Tiếng Việt là gì?
À quên, làm sao để dùng to_param với tiếng Việt?
Nói chung có 2 cách:
- Để nguyên xi (chứ nếu là tiếng Nhật thì chẳng nhẽ lại chuyển thành Romaji? Nhìn thì đẹp đấy nhưng không đạt hiệu quả SEO!), chỉ cần loại bỏ một số kí tự gây hiểu lầm cho routes.rb như . /
- Loại bỏ dấu tiếng Việt, vẫn đạt hiệu quả SEO mà lại đẹp.
Rất may là từ khi thực dân Pháp sang khai hoá văn minh, dân ta bắt đầu dùng kí tự Latinh nên việc loại bỏ dấu rất đơn giản.
Dưới đây là mã ví dụ.
ActiveRecord::Base.class_eval do
def sanitize_for_to_param(seo)
ret = seo.downcase
ret = ret.gsub(/[^[:alnum:]]/, '-') # Replace non alphanumeric characters with hyphen
ret = ret.gsub(/-{2,}/, '-') # Replace 2 - with one
ret = ret.gsub(/-+$/, '') # Remove - at the end
return ret
end
end
ActiveRecord::Base.class_eval do
def sanitize_for_to_param_with_vietnamese(seo)
ret = seo
ret = ret.gsub(/[àáạảãâầấậẩẫăằắặẳẵÀÁẠẢÃÂẦẤẬẨẪĂẰẮẶẲẴ]/, 'a')
ret = ret.gsub(/[ìíịỉĩÌÍỊỈĨ]/, 'i')
ret = ret.gsub(/[ùúụủũưừứựửữÙÚỤỦŨƯỪỨỰỬỮ]/, 'u')
ret = ret.gsub(/[èéẹẻẽêềếệểễÈÉẸẺẼÊỀẾỆỂỄ]/, 'e')
ret = ret.gsub(/[òóọỏõôồốộổỗơờớợởỡÒÓỌỎÕÔỒỐỘỔỖƠỜỚỢỞỠ]/, 'o')
ret = ret.gsub(/[ỳýỵỷỹỲÝỴỶỸ]/, 'y')
ret = ret.gsub(/[đĐ]/, 'd')
ret = sanitize_for_to_param_without_vietnamese(ret)
return ret
end
alias_method_chain :sanitize_for_to_param, :vietnamese
end
class Article < ActiveRecord::Base
def to_param
return "#{id}-#{sanitize_for_to_param(title)}"
end
end
172