Giáo trình Công nghệ XML - Nghề: Hệ thống thông tin

Chương 1. Giới thiệu xml

KHOA CÔNG NGHỆ THÔNG TIN 12

CHƯƠNG 1. GIỚI THIỆU XML

1.1 Thế giới XML

Hiện nay XML (eXtensible Markup Language) chiếm vị trí rất quan trọng trong

việc chuyển tải, trao đổi dữ liệu và liên lạc giữa các ứng dụng. Điều này càng

được khẳng định khi các hệ điều hành từ WindowsXP trở đi và các hệ điều hành

khác bên trong nó chứa rất nhiều tập tin XML. Hơn nữa khi bộ .Net ra đời càng

làm cho XML trở nên thịnh hành và ngày càng được ứng dụng rộng rãi.

Sử dụng kỹ thuật XML không chỉ có tập đoàn Microsoft mà ngay cả Sun, IBM,

Oracles điều hỗ trợ XML sử dụng nó trong các hệ điều hành và các ứng dụng.

XML là ngôn ngữ xây dựng cấu trúc tài liệu văn bản, dựa theo chuẩn SGML

(Standard Generalized Markup Language: siêu ngôn ngữ có khả năng sinh ngôn

ngữ khác). SGML được phát triển cho việc định cấu trúc và nội dung tài liệu điện

tử, do tổ chức ISO (International Organization for Standards) chuẩn hóa năm

1986.

SGML do IBM đưa ra, song không thể không kể đến những đóng góp của các

công ty khác. XML được W3C (World Wide Web Consortium - tổ chức độc lập

định ra tiêu chuẩn cho trình duyệt Web, máy chủ và ngôn ngữ) phát triển, nhưng

đặc tả XML lại do Netscape, Microsoft và các thành viên của dự án Text

Encoding Initiative

(TEI) xây dựng. Tổ chức W3C XML Special Interest Group có đại diện từ hơn

100 công ty cùng nhiều chuyên gia được mời khác.

Lý do ra đời của XML vì SGML rất rắc rối khó sử dụng và HTML có nhiều

giới hạn nên năm 1996 tổ chức W3C thiết kế XML. XML version 1.0 được định

nghĩa trong hồ sơ February 1998 W3C Recommendation.

Điểm quan trọng của kỹ thuật XML là nó không thuộc riêng về một công ty?

nào, nó là một sản phẩm mà trí tuệ của nó thuộc về cả thế giới, là một tiêu chuẩn

được mọi người công nhận vì được soạn ra bởi W3C (World Wide Web

Consortium).

Bản thân của XML rất đơn giản, nhưng các công cụ chuẩn được định ra để làm

việc với XML như Document Object Model - DOM, XPath, XSL,. thì lại rất

hữu hiệu, và chính các chuẩn này được phát triển không ngừng.

XML cũng giống như HTML đều là ngôn ngữ đánh dấu, nhưng điều cần nói ở

đây là sự ra đời của XML nhằm để khắc phục một số mặt hạn chế của HTML.

HTML và XML đều sử dụng các thẻ nhưng các thẻ của HTML là một bộ dữ

liệu được xây dựng và định nghĩa trước, nghĩa là người lập trình phải tuân thủ

theo các thẻ đã định nghĩa của HTML, hiện HTML có khoản hơn 400 thẻ, để nhớ

hết 400 thẻ này cũng không có gì khó khăn đối với người lập trình web chuyên

nghiệp nhưng thật khó đối với những người không chuyên. Hơn nữa, các thẻ của

HTML không nói lên được mô tả dữ liệu trong đó. Nhưng đối với XML thì hoàn

toàn khác bởi vì tag trong XML là do người lập trình tự định nghĩa và mỗi thẻ là

một mô tả dữ liệu mà người lập trình muốn truyền đạt.

Ngôn ngữ định dạng

Ngôn ngữ định dạng (Markup Language ) là tất cả những gì dùng để mô tả nội

dung một tài liệu, đó là cách mà nội dung của tài liệu được diễn dịch. Tuy nhiên,

ngôn ngữ định dạng chúng ta thường sử dụng trước đây là HTML.

Ví dụ: Tạo tập tin document.html

pdf197 trang | Chia sẻ: Thục Anh | Ngày: 12/05/2022 | Lượt xem: 418 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Giáo trình Công nghệ XML - Nghề: Hệ thống thông tin, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ry2); categories.AppendChild(category3); author.AppendChild(firstName); author.AppendChild(lastName); blog.AppendChild(title); blog.AppendChild(author); blog.AppendChild(categories); doc.AppendChild(blog); // doc.Save("C:\\Blog.xml"); Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 149 Đoạn mã trên mặc dù rất dễ hiểu nhưng cú pháp lại quá dài dòng. Việc tạo ra một cấu trúc XML theo cách trên chỉ tập trung vào hai phương thức: CreateElement() để tạo một phần tử mới và AppendChild() để thêm phần tử con vào phần tử hiện tại. Đây quả thực là một thứ dễ gây chán nản nếu như bạn phải thường xuyên làm việc với chúng. Bây giờ ta thử xem cách mới theo LINQ to XML (namespace System.Xml.Linq): 1 2 3 4 5 6 7 8 9 10 11 12 XElement root = new XElement("Blog", new XElement("Title", "Huynh Duy's Programming Blog"), new XElement("Author", new XElement("FirstName", "Huynh"), new XElement("LastName", "Duy")), new XElement("Categories", new XElement("Category", "LINQ"), new XElement("Category", "WPF"), new XElement("Category", "ADO.NET") ) ); Rất đơn giản và dễ hiểu, chỉ cần duy nhất một lớp XElement để tạo ra một tài liệu XML như trên. Điểm chính của cách làm này là sử dụng từ khóa params. Cho phép truyền một số lượng tham số không xác định vào phương thức. Một overload của constructor lớp XElement được sử dụng nhiều nhất là: public XElement(XName name, params object[] content); Theo overload này, một phần tử được tạo ra dựa hai yếu tố: tên của phần tử và các phần tử con của nó. Tất cả các phần tử thuộc mảng content trong tham số trên đều trở thành phần tử con của đối tượng XElement được định nghĩa. Và như bạn thấy với cú pháp này, mã nguồn được rút gọn rất nhiều so với cách cũ. Tuy nhiên do các tham số được lồng nhau và phân cấp trên một dòng lệnh nên một rắc rối mà ta gặp phải là khó xác định được cấu trúc của tài liệu XML được tạo ra. Vì lý do trên, bạn nên hạn chế lồng quá nhiều phần tử và phân cấp quá nhiều khi tạo một đối tượng XElement. Chia ra khởi tạo nhiều XElement sau đó hợp lại là cách tốt để làm đoạn mã dễ hiểu hơn. Một lời khuyên đơn giản nữa là khi viết code, bạn hãy giữ việc thụt lề theo cấp độ của phần tử trong tài liệu XML như trong đoạn mã ví dụ trên, như vậy nội dung và cấu trúc của tài liệu XML gần như hiện lên trước mắt bạn. Cây phân cấp lớp của LINQ to XML API Sau khi lược bỏ một vài lớp mà tôi sẽ chưa bàn tới, ta có cây phân cấp lớp của LINQ to XML API, tất cả các lớp này đểu nằm trong namespace System.Xml.Linq. Tuy nhiên bạn cũng cần add reference đến namespace System.Xml do các lớp thừa kế một vài interface từ namespace này như IXmlLineInfo, IXmlSerializable: Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 150 Công dụng của mỗi lớp trên có thể được nhận biết ngay từ tên gọi của chúng, tuy nhiên để đảm bảo mọi thứ rõ ràng, tôi đã tạo một bảng liệt kê các lớp này cùng với mô tả ngắn gọn của chúng. Nếu muốn xem chi tiết hơn, bạn có thể tham khảo trên MSDN, xem metadata trong Visual Studio hoặc chi tiết hơn là dùng một công cụ .Net Reflector (ví dụ ILSpy). Class Description XName Represents a name of an XML element or attribute XNamespace Represents an XML namespace. This class cannot be inherited XObject Represents a node or an attribute in an XML tree XAttribute Represents an XML attribute XNode Represents the abstract concept of a node (element, comment, document type, processing instruction, or text node) in the XML tree XText Represents a text node XComment Represents an XML comment XContainer Represents a node that can contain other nodes XElement Represents an XML element Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 151 XDocument Represents an XML document Sau khi đã có cái nhìn tổng quan về mô hình lớp của API này, ta sẽ đi sâu hơn vào xem xét một vài lớp chính mà ta sẽ không thể bỏ lỡ nếu như muốn làm thành thạo được LINQ to XML. XNamespace Đại diện cho một namespace trong tài liệu XML. Bạn có thể tạo thể hiện của lớp này từ một đối tượng string có dạng URI. XNamespace ns=”https://Huynh Duyit.wordpress.com/namespace“ Để gán namespace cho một phần tử, thông thường ta sẽ tạo một đối tượng XNamespace và dùng toán tử cộng để tạo ra một tên đầy đủ cho phần tử: XNamespace ns=”https://Huynh Duyit.wordpress.com/namespace” XElement x= new XElement(ns+”FirstElement”); Để hiểu thêm về XML Namespace bạn có thể xem bài hướng dẫn tại trang sau: XName Mỗi phần tử XML được tạo ra đều phải có tên, và tên này được đại diện bằng một đối tượng XName. Về cơ bản, XName là một định danh bao gồm tên cục bộ và tên namespace của phần tử (bao gồm XNamespace). Giống như XNamespace, XName có thể tự động được tạo ra từ một đối tượng string bằng cách overload operator: public static implicit operator XName(string expandedName); Một đối tượng XName sẽ được tạo ra trong mỗi dòng lệnh sau: XName name = “Test”; XElement root = new XElement(“Test”); Ngoài ra bạn có thể tạo một XName bao gồm tên cục bộ và namespace bằng cách đặt tên namespace trong cặp {} và theo sau đó là tên cục bộ: XName name=”{https://Huynh Duyit.wordpress.com}Test”; Khi đó property LocalName sẽ là “Test” và Namespace sẽ là https://Huynh Duyit.wordpress.com. XObject Được thừa kế từ System.Object và IXmlLineInfo (System.Xml), XObject là một lớp abstract nằm ở đỉnh của cây phân cấp mà tôi minh họa ở trên. Lớp này cung cấp các property cần thiết giúp ta truy xuất được những phần tử liên quan và một số thông tin cần thiết của phần tử trong tài liệu XML. – Document: đối tượng XDocument chứa toàn bộ cấu trúc và nội dung của tài liệu XML. – NoteType: lưu giá trị kiểu enum XmlNodeType xác định kiểu của phần tử. – Parent: tham chiếu đến phần tử cha có kiểu XElement. Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 152 Ngoài ra lớp này chứa hai event là Changed và Changing được kích hoạt mỗi khi phần tử bị thay đổi. Hai event này có kiểu EventHandler. Lớp XObjectChangeEventArgs chứa property có kiểu XObjectChange, đây là một enum chỉ ra kiểu thay đổi tác động đến phần tử, bao gồm 4 giá trị: Add, Remove, Name (đối tên), Value (đổi giá trị). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 using System; using System.Xml.Linq; class LinqToXmlEx { static void Main(string[] args) { XElement root = new XElement("Root"); XElement lchild = new XElement("LChild","Foo"); XElement rchild = new XElement("RChild","Bar"); root.Changing += (sender, e) => { Console.WriteLine("Changing type: " + e.ObjectChange); }; root.Add(lchild); root.Add(rchild); lchild.Name = "LeftChild"; rchild.Add("rel"); lchild.Remove(); Console.WriteLine("----------"); Console.WriteLine(root); Console.Read(); } } Output: Changing type: Add Changing type: Add Changing type: Name Changing type: Value Changing type: Remove ———- Barrel Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 153 Thêm vào đó, XObject cho phép bạn thêm các annotation để bổ sung thông tin cho đối tượng. Các thông tin annotation chỉ là tạm thời, không phải là một phần của tài liệu XML và sẽ không được lưu xuống file. Các phương thức làm việc với annotation trong XObject: Name Description AddAnnotation Adds an object to the annotation list of this XObject. Annotation(Type) Gets the first annotation object of the specified type from this XObject. Annotation() Get the first annotation object of the specified type from this XObject. Annotations(Type) Gets a collection of annotations of the specified type for this XObject. Annotations() Gets a collection of annotations of the specified type for this XObject. RemoveAnnotations(Type) Removes the annotations of the specified type from this XObject. RemoveAnnotations() Removes the annotations of the specified type from this XObject. XAttribute Một phần tử XML có thể chứa nhiều attribute, mỗi attribute này được đại diện bởi một đối tượng XAttribute. Bạn có thể truy xuất đến các attribute trước và sau bằng cách dùng hai property PreviousAttribute và NextAttribute. Trong trường hợp attribute là một khai báo namespace, property IsNamespaceDeclaration sẽ trả về true. XNode Đại diện cho các phần tử (element, comment, document type, processing instruction, text node). XNode cho phép bạn truy xuất đến các phần tử trước và sau với PreviousNode và NextNode. Một đặc điểm quan trọng của XNode là cung cấp các phương thức dùng để thêm/xóa/sửa các phần tử trong tài liệu XML. Các phần tử được thêm vào sẽ có cùng level với nhau và có cùng phần tử cha. Name Description AddAfterSelf(Object) Adds the specified content immediately after this node. AddAfterSelf(Object[]) Adds the specified content immediately after this node. AddBeforeSelf(Object) Adds the specified content immediately before this node. AddBeforeSelf(Object[]) Adds the specified content immediately before this node. Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 154 Remove Removes this node from its parent. ReplaceWith(Object) Replaces this node with the specified content. ReplaceWith(Object[]) Replaces this node with the specified content. Ngoài ra còn có các phương thức để duyệt các phần tử trong tài liệu XML như Ancestors() dùng để lấy về một collection các phần tử có level cao hơn (tổ tiên): Name Description Ancestors() Returns a collection of the ancestor elements of this node. Ancestors(XName) Returns a filtered collection of the ancestor elements of this node. Only elements that have a matching XName are included in the collection. ElementsAfterSelf() Returns a collection of the sibling elements after this node, in document order. ElementsAfterSelf(XName) Returns a filtered collection of the sibling elements after this node, in document order. Only elements that have a matching XName are included in the collection. ElementsBeforeSelf() Returns a collection of the sibling elements before this node, in document order. ElementsBeforeSelf(XName) Returns a filtered collection of the sibling elements before this node, in document order. Only elements that have a matching XName are included in the collection. IsAfter Determines if the current node appears after a specified node in terms of document order. IsBefore Determines if the current node appears before a specified node in terms of document order. NodesAfterSelf Returns a collection of the sibling nodes after this node, in document order. NodesBeforeSelf Returns a collection of the sibling nodes before this node, in document order. Lớp này còn chứa các phương thức để đọc, ghi nội dung XML. Vấn đề này ta sẽ đề cập tới chi tiết hơn trong một bài viết khác. XText và XComment Các phần tử này chỉ chứa property Value lưu giá trị của văn bản, chú thích. Một dạng wrapper của string. XContainer Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 155 Dùng để chứa các phần tử khác. Lớp này cung cấp hai property là FirstNode và LastNode cho phép truy xuất đến phần tử đầu và cuối. Ngoài ra bổ sung thêm cho lớp XNode các phương thức để thêm phần tử con vào. Các phương thức mà bạn cần quan tâm của lớp này: Name Description Add(Object) Adds the specified content as children of this XContainer. Add(Object[]) Adds the specified content as children of this XContainer. AddFirst(Object) Adds the specified content as the first children of this document or element. AddFirst(Object[]) Adds the specified content as the first children of this document or element. DescendantNodes Returns a collection of the descendant nodes for this document or element, in document order. Descendants() Returns a collection of the descendant elements for this document or element, in document order. Descendants(XName) Returns a filtered collection of the descendant elements for this document or element, in document order. Only elements that have a matching XName are included in the collection. Element Gets the first (in document order) child element with the specifiedXName. Elements() Returns a collection of the child elements of this element or document, in document order. Elements(XName) Returns a filtered collection of the child elements of this element or document, in document order. Only elements that have a matchingXName are included in the collection. Nodes Returns a collection of the child nodes of this element or document, in document order. RemoveNodes Removes the child nodes from this document or element. ReplaceNodes(Object) Replaces the children nodes of this document or element with the specified content. ReplaceNodes(Object[]) Replaces the children nodes of this document or element with the specified content. XElement Đại diện cho một phần tử, lớp này tương tự như XNode và XContainer, bổ sung thêm một số thuộc tính và phương thức ví dụ như Attributes() để lấy về các attribute của Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 156 phần tử. Đặc trưng chính của lớp này là các phương thức Parse, Load, Save nội dung của văn bản hoặc tập tin thành một phần tử. Ví dụ ta sử dụng Parse() để tạo một phần tử XML từ một đoạn văn bản. Hai đối tượng x1 và x2 sau sẽ tạo ra một phần tử giống nhau: 1 2 3 4 5 XElement x1=XElement.Parse("Huynh Duy"); XElement x2=new XElement("Blog", new XAttribute("title","Let me know what you think"), new XElement("Name","Huynh Duy")); Tài liệu XML được tạo ra từ x1 và x2 trên sẽ có cùng nội dung như sau: 1 2 3 Huynh Duy XDocument XDocument là lớp đại diện cho toàn bộ một tài liệu XML. Sau đây là một ví dụ tương đối hoàn chỉnh từ MSDN cho những gì bạn mới học: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 using System; using System.Linq; using System.Xml.Linq; public class Linq2XmlExample { public static void Main() { XDocument srcTree = new XDocument( new XComment("This is a comment"), new XElement("Root", new XElement("Child1", "data1"), new XElement("Child2", "data2"), new XElement("Child3", "data3"), new XElement("Child2", "data4"), new XElement("Info5", "info5"), new XElement("Info6", "info6"), new XElement("Info7", "info7"), new XElement("Info8", "info8") ) ); XDocument doc = new XDocument( new XComment("This is a comment"), new XElement("Root", from el in srcTree.Element("Root").Elements() where ((string)el).StartsWith("data") select el ) Chương 5. Lập trình KHOA CÔNG NGHỆ THÔNG TIN 157 28 29 30 31 32 33 34 35 ); Console.WriteLine(doc); doc.Save("C:\\example.xml"); Console.Read(); } } Output: data1 data2 data3 data4 Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 158 CHƯƠNG 6. GIAO TIẾP 6.1 RSS ATOM và CONTENT Syndication 1. Khái niệm RSS/Atom là gì? RSS(viết tắt của Really Simple Syndication) đây là một định dạng tập tin thuộc họ XML dùng trong việc chia sẻ tin tức Web (Web syndication) được dùng bởi nhiều website tin tức và web blog. Thường thì RSS chia sẻ tin tức miễn phí, một vài trang báo tin tức nước ngoài thì họ sẽ phải mua.(Họ rất đề cao vấn đề bản quyền nội dung: Xem thêm: Hướng dẫn report vi phạm bản quyền nội dung (' h%C6%B0%E1%BB%9Bng-d%E1%BA%ABn-Report-website-copy- n%E1%BB%99i-dung-vi%E1%BB%87c-vi-ph%E1%BA%A1m-b%E1%BA%A3n- quy%E1%BB%81n')). 2. Cấu trúc RSS cơ bản bao gồm: Fri, 25 Jul 2014 08:34:07 +0000 ... Với những bạn sử dụng ngôn ngữ WordPress giống như SE.edu.vn thì đã có sẵn RSS chuẩn và khá đầy đủ. Ngoài những thuộc tính như cấu trúc ở trên còn có: title, comments, pubDate, dc:creator, category, guid ispermalink, description, content:encoded, wfw:commentRss, slash:comments Hình ảnh RSS của SE.edu.vn sau khi truy cập (Viewsoure: Ctr+U) 3. RSS có quan trọng trong SEO? Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 159 RSS cũng như Sitemap XML rất quan trọng trong SEO, nó giúp các công cụ tìm kiếm không chỉ Google(Bing cũng sử dụng định dạng chuẩn như trên) cập nhật thông tin mới cũng như update bài viết, content trên website của bạn. 4. Cần lưu ý gì với RSS Feed – Trong RSS chỉ bao gồm những URL(đường link) chỉ định Google Bot lập chỉ mục(những URL hay folder bị chặn bởi file Robots.txt thì không nên liệt kê vào RSS. – Không lên tạo các URl trùng lặp trong RSS. – Định dạng thời gian trong RSS theo chuẩn RFC822. CONTENT SYNDICATION LÀ GÌ? Content syndication xảy ra khi một hoặc nhiều bên thứ ba đăng tải lại chính xác nội dung gốc từ trang nào đó. Nói dễ hiểu hơn, content syndication là quá trình đẩy nội dung sẵn có vào các website của bên thứ ba. Ví dụ, tác giả James Clear đăng tải lần đầu tiên bài viết về “deliberate practice” trên blog cá nhân. Sau đó, Lifehacker đăng lại nội dung y hệt bài viết của James Clear (với ghi chú “Bài viết gốc từ trang James Clear). Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 160 LỢI ÍCH CỦA CONTENT SYNDICATION THU HÚT REFERRAL TRAFFIC Referral traffic là lưu lượng truy cập từ nguồn khác đổ về website chính. Đây là một trong ba thông số Google Analytics theo dõi thường xuyên, bên cạnh direct traffic và organic traffic. Hầu hết website khi đăng lại nội dung của bạn sẽ thông báo cho độc giả biết bản gốc đến từ đâu và link đến nguồn bài viết gốc. Nếu độc giả thích thú với bài viết, họ sẽ click vào website của bạn để tham khảo thêm. THU HÚT EMAIL SUBSCRIBER Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 161 Sarah Peterson (tác giả trang Unsettle.org) thu được hơn 1.000 lượt subscribe mới bằng việc đăng tải lại nội dung của cô trên EliteDaily. Sarah thực hiện điều này bằng cách đề nghị biên tập dẫn link về khóa học của cô trong phần tiểu sử cuối bài. XÂY DỰNG THƯƠNG HIỆU Độc giả thấy tên thương hiệu của bạn xuất hiện liên tục trên các trang có thẩm quyền sẽ tạo ra hiệu ứng lan truyền. Từ đó, họ ngầm thừa nhận trang của bạn cũng có tính thẩm quyền, nâng cao lòng tin khi chọn mua sản phẩm/ dịch vụ của bạn trong tương lai. PHÂN BIỆT CONTENT SYNDICATION, REPURPOSING VÀ GUEST BLOGGING REPURPOSING Content repurposing xảy ra khi bạn tìm ra cách sử dụng mới cho nội dung hiện tại. Ví dụ, từ một video, bạn có thể chuyển đổi sang hình thức khác là blog post và ngược lại. GUEST BLOGGING Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 162 Guest blogging là tạo ra nội dung hoàn toàn mới cho một trang nào đó và thường không được đăng tải ở nhiều nơi (Ví dụ bài viết của khách hàng về bạn trên một trang cụ thể, điển hình là bài review). CONTENT SYNDICATION Content syndication được đánh giá như một chiến thuật phân phối nội dung, tức bạn đăng tải nội dung trên website của mình thì nó sẽ được đăng tải lại ở những nơi khác. Ví dụ hai bài viết sau đây ở hai nơi, chúng đều y hệt nhau. Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 163 Với content syndication, bạn không phải mất thời gian cho việc repurposing hoặc viết lại nội dung để tiếp cận khách hàng mới. CONTENT SYNDICATION ẢNH HƯỞNG ĐẾN SEO RA SAO? Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 164 Nhiều người quan ngại rằng content syndication sẽ gây ra vấn đề trùng lặp nội dung (duplicate content) và bị Google phạt. Google nêu rõ rằng: “Có không ít trường hợp chủ ý gây trùng lặp nội dung trên nhiều tên miền nhằm “ăn gian” thứ hạng trên bộ máy tìm kiếm hoặc thu về traffic nhiều hơn. Động thái gian lận này ảnh hưởng tiêu cực đến trải nghiệm người dùng, khi họ liên tục thấy nội dung giống nhau lặp lại trên các kết quả tìm kiếm”. Tuy nhiên, Google cũng hiểu rằng nội dung thỉnh thoảng xuất hiện trên nhiều hơn một trang là có lý do chính đáng. Và trong trường hợp này, đó là content syndication. Với content syndication, bạn không cố gắng ăn gian kết quả và xếp hạng cho nội dung nhiều lần, mà chỉ đang thu hút thêm lượng độc giả bằng cách tiếp cận nhóm độc giả mới trên các trang khác. Content syndication có thể dẫn đến tình trạng Google xếp hạng bài viết được đăng tải lại cao hơn bài viết gốc, thế nhưng lại không thường xuyên, bởi Google có thuật toán riêng để xác định đâu là bài viết gốc để xếp hạng phù hợp. Rất hiếm khi xảy ra tình trạng thuật toán của Google xác định nhầm bản sao thành bản gốc. Cách tốt nhất là trên bài viết được đăng lại có gắn canonical link dẫn về bài viết gốc (canonical link là một chỉ định đặc biệt được nhúng vào mã của website để biết website nào đó là nguồn gốc thông tin khi công cụ tìm kiếm hiển thị kết quả cho người dùng). CÁC BƯỚC THỰC HIỆN CONTENT SYNDICATION BƯỚC 1: TẠO NỘI DUNG CHẤT LƯỢNG Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 165 Bài viết trên website của bạn phải nguyên bản và chất lượng, nghĩa là được nghiên cứu kỹ lưỡng, thông tin minh bạch, đem lại giá trị, có trích dẫn thực và được chỉnh sửa chính xác. Có thể thuê nhà văn hoặc biên tập viên có kỹ năng báo chí tốt làm điều này. BƯỚC 2: TÌM KIẾM ĐỐI TÁC SYNDICATE Có trong tay nội dung chất lượng, bước tiếp theo là tìm kiếm các trang để đăng tải lại. Sau đây là một vài gợi ý. Dùng Google Nếu các trang bạn nhắm đến từng đăng lại nội dung từ các trang khác, thì xác suất cao họ cũng đồng ý đăng tải lại nội dung từ bạn. Thông thường, các trang dẫn link về bài viết gốc thường sử dụng các cụm từ như: – Republished with permission (Được phép đăng lại) – Originally appeared on (Bản gốc xuất hiện trên) – Originally published on (Bản gốc được đăng tải trên) Để tìm đối tác syndicate, bạn sử dụng các cụm từ trên + chủ đề mình muốn. Ví dụ như hình sau. Ngoài ra, bạn có thể cài đặt SEO toolbar của Ahrefs để nhanh chóng chọn lựa trang có thẩm quyền phù hợp (Domain Rating cao). Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 166 Nếu bạn đã chọn được đối tác, nhưng lại không chắc liệu họ có đăng tải nội dung hay không thì áp dụng cú pháp tìm kiếm như hình dưới. Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 167 Dùng Site Explorer Nếu bạn từng thấy nội dung của tác giả nào đó được đăng tải lại trên nhiều trang thì có thể thực hiện bằng cách dán trang của tác giả vào Site Explorer của Ahrefs, đến báo cáo Backlinks, rồi thêm một trong những cụm từ gợi ý ở phần trên vào ô “Include”. Kết quả sẽ cho ra các trang từng đăng tải lại nội dung từ tên miền bạn đang target. Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 168 BƯỚC 3: LIÊN HỆ VÀ THỎA THUẬN Tìm tên và email của chủ sở hữu website hoặc biên tập viên, sau đó liên hệ và xin phép họ đăng tải lại nội dung của bạn. Các trang lớn có nhà báo khác nhau cho từng chủ đề, vì vậy cần đảm bảo liên hệ đúng người. Paid syndication Paid syndication (Đăng tải lại có trả phí) là bạn trả tiền để nội dung xuất hiện trên các trang lớn. Ví dụ, nền tảng như Outbrain và Taboola đặt link dẫn tới nội dung của bạn ở cuối bài viết, thường là trên các trang nổi tiếng như The Guardian. Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 169 Nếu đã quen với Facebook ads thì việc tạo chiến dịch paid syndication cũng tương tự. Đăng nhập, chọn campaign objective, ngân sách, vị trí target Self-syndication Self-syndication là tự bạn đăng tải lại nội dung của chính mình trên các trang khác. Có thể tham khảo vài địa chỉ sau: Medium Medium là trang xuất bản online phổ biến mà ai cũng có thể đóng góp, thu hút gần 39 triệu lượt truy cập mỗi tháng (chỉ tính riêng organic search). Với Medium, bạn không cần đăng tải nội dung mới, mà có thể đăng tải lại nội dung có sẵn bằng cách click vào profile picture, đến Stories => Thêm story => Dán vào URL. Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 170 Medium cũng hỗ trợ canonical link dẫn về bài viết gốc. LinkedIn Click chọn “Write an article” và copy – paste nội dung. Reddit Reddit là nơi mọi người có thể đăng tùy thích. Tuy nhiên, cách tốt nhất bạn nên làm là đăng tải lại bài viết chính xác từng từ với subreddit phù hợp (subreddit là các mục nội dung được tổ chức theo lĩnh vực quan tâm) và đặt link dẫn về nguồn ở cuối bài. Tránh xa dạng affiliate link (liên kết tiếp thị). LƯU Ý CÁCH CONTENT SYNDICATION HIỆU QUẢ Chương 6. Giao tiếp KHOA CÔNG NGHỆ THÔNG TIN 171 REFORMATTING Reformating (Tái định dạng) nghĩa là biến đổi bài viết của bạn thành hình thức mới, ví dụ video hay podcast. Có hai lý do: – Không phải ai cũng thích đọc. Nhiều đối tượng sẽ thích xem hoặc nghe hơn. – Định dạng mới làm tăng cơ hội syndication. Ví dụ, bạn có thể đăng tải lại video trên YouTube, Facebook và podcast trên Spotify, Google Podcasts. SPLINTERING Splintering là phương pháp cắt nhỏ nội dung và đăng tải lại. Một bài viết về mẹo vặt có thể bao gồm nhiều tip khác nhau. Hãy trích xuất các tip đó và sử

Các file đính kèm theo tài liệu này:

  • pdfgiao_trinh_cong_nghe_xml_nghe_he_thong_thong_tin.pdf