Khi bạn viết một bài viết trên blog của mình, bạn (cũng như tôi) đều muốn có nhiều người vào xem bài viết của mình. Tuy nhiên không phải ai cũng có thể biết được địa chỉ của trang web của mình phải không ? 90% khách viếng thăm trang web của mình là nhờ vào Search Engine. Do đó, nếu bạn là developer và bạn có blog, có viết ứng dụng Web thì khi đó bạn có quan tâm đến SEO không ? Và khi bạn tìm hiểu Search Engine thì chắc chắn bạn phải hiểu đến lúc này URL của trang web của bạn quan trọng như thế nào phải không ?
Ví dụ với bài viết này có đường dẫn URL: ..../community-server/community-server-voi-url-than-thien-voi-seo/
Và khi được một Search Engine nào đó index vào thì URL chứa các keywords như: Community Server, URL, SEO, than thien, voi (và thường thì Tiếng Việt khi được tìm sẽ tìm theo dạng Tiếng việt không dấu nhiều hơn có dấu!)
Quay trở lại với Community Server. Bài viết này tôi hướng dẫn bạn fixed một bug nhỏ nhưng là một bước tiến rất lớn đối với Community Server. Vì sao tôi nói như vậy ? Nếu bạn để ý thì khi bạn post 1 bài viết trong blog của mình trong Community Server với tiêu đề là Tiếng Việt thì lúc đó bạn có nhìn kỹ vào URL của bài viết của mình không ? Và nếu nhìn kỹ thì bạn cố gắng lắm còn đọc không được nữa à! Bạn đã không đọc nỗi thì làm sao Search Engine đọc được hả.
Bây giờ thì bắt tay vào làm như sau:
Login vào Community Server với user mà bạn có thể post được bài trên blog của mình. Khi đó post bài test với tiêu đề (Title) như sau: Bí mật trong máy tính một trăm năm trước công nguyên. (nội dung không quan trọng, post TEST chẳng hạn). Lúc đó bạn sẽ thấy giống như hình sau:

Sau đó lưu lại, và view lại bài post mới test, nhìn vào URL trên trình duyệt của bạn sẽ thấy như hình sau

Wowo, bạn thử copy đoạn tôi gạch đích, gửi cho bạn thân của bạn qua yahoo messenger và hỏi họ đọc được đó là gì ? A a a a.... họ đọc được không ? nếu họ đọc không được thì làm sao SEO đọc được nữa đây. Đúng vậy, vấn đề tôi muốn URL của tôi lúc này phải là

Vì sao có sự khác biệt như thế. Thật ra đó là do Community Server khi thiết kế là họ thiết kế cho ngôn ngữ Tiếng Anh. Do đó họ chỉ cần dùng các ký tự ASCII là đủ. Còn mình khi post bài lại dùng Tiếng Việt Unicode nên mới có sự xảy ra như thế. Và khi bài viết của bạn được published lên blog thì đều đó có nghĩa là nó đã được lưu xuống database và không có khả năng fixed lại (nếu có thì phải can thiệp trực tiếp xuống database, và điều này chỉ làm khi bạn thật sự có kinh nghiệm nhiều về Community Server).
Vậy có cách nào khác phục không ? và tôi muốn URL của tôi phải đọc được giống như là: Tiếng Việt không dấu ? OK, Tiếng Việt không dấu đọc cũng hiểu mà (nhiều khi bạn chat cũng dùng Tiếng Việt không dấu nhiều mà).
Cách khác phục thì đương nhiên là có và cách này yêu cầu bạn phải sửa Core code của Community Server và khi đó phải phải build lại DLL và upload nó vào lại thư mục bin trong host của mình.
Sau đây mình hướng dẫn bạn cách khắc phục (fixed) lỗi này nhe.
+ Mở solution Community Server 2008 SP1 SDK bằng Visual Studio 2008
+ Click vào project CommunityServerComponents20, sau đó chọn file \Components\Globals.cs và thêm vào method sau. (Nên thêm ở đầu class này).
27 public static string RemoveDiacritics(string input)
28 {
29 input = input.Replace('đ', 'd');
30 input = input.Replace('Đ', 'D');
31 string stFormD = input.Normalize(NormalizationForm.FormD);
32 int len = stFormD.Length;
33 System.Text.StringBuilder sb = new StringBuilder();
34 for (int i = 0; i < len; i++)
35 {
36 UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[i]);
37 if (uc != UnicodeCategory.NonSpacingMark) { sb.Append(stFormD[i]); }
38 }
39 return (sb.ToString().Normalize(NormalizationForm.FormC));
40 }
+ Tiếp tục, click chọn project: CommunityServerBlogs20, sau đó chọn file: WeblogPosts.cs.
+ Sau đó đi đến dòng 212. Lúc đó là method sau
212 internal static void PostFormatting(WeblogPost post)
+ Cẩn thận sửa lại trong method này như sau: (comment dòng code gốc, sau đó edit lại thành dòng mới)
223 //string name = spacer.Replace(postNameInvalidChars.Replace(post.Subject, " "), " ").Trim().ToLower();
224 string name = spacer.Replace(postNameInvalidChars.Replace(Globals.RemoveDiacritics(Globals.HtmlDecode(post.Subject)), " "), " ").Trim().ToLower();
+ Cuối cùng chọn Release_Obfuscate để build solution.
+ Sau đó, vào thư mục bin của project CommunityServerWeb20 (Internal) để copy 2 file: CommunityServer.Blogs.dll, CommunityServer.Components.dll lên thư mục bin của host (nếu đã published lên host)
+ Test thử post một bài và các bạn có thể xem kết quả như hình dưới đây

Bạn có ý kiến gì không ?