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 ...
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
và
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.