Dữ liệu có cấu trúc là một định dạng chuẩn để cung cấp thông tin về một trang và phân loại nội dung trang. Ví dụ: trên một trang về công thức nấu ăn sẽ có các loại dữ liệu về nguyên liệu, thời gian nấu và nhiệt độ, lượng calo, v.v.
Google sử dụng dữ liệu có cấu trúc tìm thấy trên web để hiểu nội dung của trang cũng như thu thập thông tin về web và thế giới nói chung.
Yêu cầu của google về dữ liệu có cấu trúc là ít thay đổi nhưng nhiều khi có phát sinh. Nên khi kiểm tra kết quả nhiều định dạng Tại đây (Nên kiểm tra cả trang chủ và trang bài viết) sẽ bị báo lỗi, thường là cảnh báo không bắt buộc nhưng không xanh thì không sướng.
Định dạng chuẩn seo của dữ liệu có cấu trúc cho widget Blog1 version 2
Ở thời điểm hiện tại khi đáp ứng nhu cầu kiểm tra kết quả nhiều định dạng cho web/blog dữ liệu Json có dạng như dưới.<b:includable id='postMetadataJSON'> <script type='application/ld+json'> { "@context": "http://schema.org", "@type": "BlogPosting", "mainEntityOfPage": { "@type": "WebPage", "@id": "<data:post.url.canonical.jsonEscaped/>" }, "headline": "<data:post.title.jsonEscaped/>", "description": "<b:eval expr='(data:post.body snippet { length: 255, links: false, linebreaks: false, ellipsis: true }).jsonEscaped'/>", <b:if cond='data:view.isSingleItem'>"articleBody": "<b:eval expr='(data:post.body).escaped'/>",</b:if> "datePublished": "<data:post.date.iso8601.jsonEscaped/>", "dateModified": "<data:post.lastUpdated.iso8601.jsonEscaped/>", <b:include data='post' name='postMetadataJSONImage'/><b:include data='post' name='postMetadataJSONPublisher'/> "author": { "@type": "Person", "name": "<data:post.author.name.jsonEscaped/>", "url": "<b:if cond='data:post.author.profileUrl'><data:post.author.profileUrl.jsonEscaped/><b:else/><data:blog.homepageUrl.jsonEscaped/></b:if>", "image": "<data:post.author.authorPhoto.image.jsonEscaped/>" } } </script> </b:includable> <b:includable id='postMetadataJSONImage'> "image": { "@type": "ImageObject", "url": "<b:eval expr='(data:post.featuredImage ? resizeImage(data:post.featuredImage, 1200, "1200:630") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCnFy8Muu2uBZXR3O4ETZmlSkawqZI384FyrL2nSYHZIxa2IJCSOc2897OGKGq-gpzNTw1CAvw-DKCROEK2yDLTWp2xZjCgSl1NA_0F6R_Tx4SAV4Ei_0-eD7YBqMtPf6UG9Amm4BoUqIT/s0/blogger.png").jsonEscaped'/>", "height": <b:eval expr='data:post.featuredImage ? 630 : 348'/>, "width": 1200 }, </b:includable> <b:includable id='postMetadataJSONPublisher'> "publisher": { "@type": "Organization", "name": "<data:blog.title.escaped/>", "logo": { "@type": "ImageObject", "url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3UspfsOtohRIhV5WclebhbBbYWN08y5TMHMeLxiGqwjlL3A4hGdG36mqhgq-HKPg-b7i-YfjyjfDOdQaG5ZXvjiog7pqRELrXJQIApI-oG21BsJT_V1iSqfCVOimJlt1D53ajxkstYGvC/s0/logo.png", "width": 206, "height": 60 } }, </b:includable>Để nó hoạt động cần gọi nó ra bằng cách đặt thẻ sau vào trước thẻ đóng </article> hoặc trong phần post-footer.
<b:include cond='data:view.isSingleItem' data='post' name='postMetadataJSON'/>Thay các ảnh cho phù hợp với blog của bạn.
Với mẫu có rồi (thường thì tem bây giờ đều có tích hợp sẵn) nếu lỗi thì chỉ cần thay phần ruột trong các thẻ <b:includable> là xong để tránh bị lỗi.
Định dạng chuẩn seo của dữ liệu có cấu trúc cho widget Blog1 version 1
Với mẫu blog version 1 cấu trúc thẻ định dạng thời gian khác với mẫu version 2 ở trên nên cần sử dụng code sau.<b:includable id='postMetadataJSON' var='post'> <script type='application/ld+json'> { "@context": "http://schema.org", "@type": "BlogPosting", "mainEntityOfPage": { "@type": "WebPage", "@id": "<data:post.url.canonical.jsonEscaped/>" }, "headline": "<data:post.title.jsonEscaped/>", "description": "<b:eval expr='(data:post.body snippet { length: 255, links: false, linebreaks: false, ellipsis: true }).jsonEscaped'/>", <b:if cond='data:view.isSingleItem'>"articleBody": "<b:eval expr='(data:post.body).escaped'/>",</b:if> "datePublished": "<data:post.timestampISO8601/>", "dateModified": "<data:post.lastUpdatedISO8601/>", <b:include data='post' name='postMetadataJSONImage'/><b:include data='post' name='postMetadataJSONPublisher'/> "author": { "@type": "Person", "name": "<data:post.author/>", "url": "<b:if cond='data:post.author.profileUrl'><data:post.author.profileUrl.jsonEscaped/><b:else/><data:blog.homepageUrl.jsonEscaped/></b:if>" } } </script> </b:includable> <b:includable id='postMetadataJSONImage'> "image": { "@type": "ImageObject", "url": "<b:eval expr='(data:post.featuredImage ? resizeImage(data:post.featuredImage, 1200, "1200:630") : "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcA90MmavzcdKbvI53nHG3TcUwy3uV_fOgCe0K0Dxigle9lR-n669h2cTjeLZyOFw5ZSTfOjVgHTVnkmvCDXXrrcL1bGlU2vznJ2r2y9a1s3If055udkPU5hiBnBh6txjpeuWyRRnFmlI/s0/jagotheme-img.png").jsonEscaped'/>", "height": <b:eval expr='data:post.featuredImage ? 630 : 348'/>, "width": 1200 }, </b:includable> <b:includable id='postMetadataJSONPublisher'> "publisher": { "@type": "Organization", "name": "<data:blog.title.escaped/>", "logo": { "@type": "ImageObject", "url": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnZxW3ZT30TOgIajO2doUv0wu3NrpnxrYdMVMDI0gUonFyiUKHFLlrrITfLR28YsoYEiAS0yEQbYT7Nzd6gwmIFGZtkHKrYG2yvGrgpPIBb-1cnoFClb2T-PHJSXZtgaXNtlyRgsyqiPOC/s0/logods.png", "width": 297, "height": 45 } }, </b:includable>