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
197 trang |
Chia sẻ: Thục Anh | Ngày: 12/05/2022 | Lượt xem: 408 | Lượt tải: 0
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:
- giao_trinh_cong_nghe_xml_nghe_he_thong_thong_tin.pdf