Sử dụng Pretty URL với gem Friendly_id trong rails

Bắt đầu bài viết mình xin đưa ra 1 số khái niệm cơ bản về SEO (hihi) URL là 1 phần nội dung của bài viết nên cần tối ưu về SEO để bài viết có giá trị cao. Trong SEO, đường dẫn URL tốt sẽ giúp cho Google index dễ dàng hơn. URL chứa từ khóa sẽ làm tăng giá trị của bài viết. Ngoài ra, Google thích các trang web tĩnh (.html) hơn là trang web động (?id=...).

xin đưa ra 2 ví dụ với 2 url như sau:

http://localhost:3000/posts/75

http://localhost:3000/posts/friendly-url

nhìn vào 2 url trên thì tất cả mọi người đều thấy được sự khác biệt về mặt hiển thị.

URL thứ nhất được gọi là Friendly URL, ta có thể tường minh được nội dung mà chúng ta sắp di chuyển đến còn với url thứ 2 thì chỉ là 1 dãy số đơn điệu.

như vậy URL tĩnh và chứa từ khóa người ta gọi là URL Friendly

1 URL như trên được gọi là 1 đường dẫn thân thiện. Khi nhìn vào URL người nhìn cũng có thể hiểu được cấu trúc trang web của bạn phần nào và bài viết đó nằm trong chuyên mục nào. Nó cung cấp đầy đủ thông tin cho người dùng hơn.

Một URL tốt sẽ đóng một vai trò rất quan trọng trong việc SEO website. Với nhu cầu nhu vậy, một gem đã được tạo ra để hỗ trợ cho việc tạo ra các URL mô tả website. Trong bài viết này, mình xin được giới thiệu gem friendly_id

đầu tiên chúng ta thêm gemfile và bundle install

gem "friendly_id", "~> 5.1.0"

Sau đó chúng ta sử dụng scaffold trong rails để tạo 1 app đơn giản.

    rails g scaffold post title:string content:text

Việc thay thế hiển thị id như trong ruby bằng name thì mình thêm 1 cột tên "slug:string" cột này sẽ có nhiệm vụ thay thế id sang name.

rails g migration AddSlugToPosts slug:string

sau đó rake db

rake db:migrate
class Post < ActiveRecord::Base
  attr_accessible :content, :title

  extend FriendlyId
  friendly_id :title, use: [:slugged]
end

Như vậy trên url mà ta nhìn thấy sẽ thay vì dùng id thông thường thì sẽ dùng name ('slug')

Như vậy vấn đễ gặp phải là làm sao tìm được bản ghi tương ứng với cột slug. Và gem Friendly_id có hàm friendly.find để giúp ta giải quyết được vấn đề đó trong controller

    post = Post.friendly.find(params[:id])

Vậy là mình tạo thành công friendly url với gem friendly_id rồi.

Note: Nếu bạn vẫn muốn viết trong controller post = Post.find(params[:id]) thì chỉ việc thêm option :finders trong model "friendly_id :title, use: [:slugged, :finders]"

Các bạn có thể tham khảo thêm về gem friendly_id tại https://github.com/norman/friendly_id

Như vậy là OK rồi.

Chưa phải quá đơn giản để tạo 1 friendly url đúng không. Nghĩ 1 hướng khác thì việc tạo ra 1 url thân thiện bằng cách convert 1 chuỗi và thay thế id thường thấy trong url bằng chuỗi convert mà mình đã lưu ở DB.

Để convert 1 chuỗi sang dạng friendly-url thì mình sử dụng gem "stringex"

do vậy mình cần tạo 1 cột slug để lưu title đã được convert bằng "stringex"

các bạn có thể tham khảo gem "stringex" tại https://github.com/rsl/stringex

Và bây giờ mình sẽ bắt đầu viết code từ Model Post

  acts_as_url :title, url_attribute: :slug, sync: true

  def to_param
    "#{id}-#{slug}"
  end

OK, vậy là đã tạo ra friendly_url với cách 2 (dull)

Tạo link thân thiện cho web là một yếu tố vô cùng quan trọng, nó giúp người xem dễ hiểu hơn và giúp các công cụ tìm kiếm dễ dàng đánh chỉ mục website hơn. Chính vì vậy mỗi khách hàng cần có những hiểu biết cơ bản về web, như vậy bạn mới có được một website tốt chuẩn SEO được.