Skills for building AEM Edge Delivery Services sites — block development, content modeling, code review, testing, and page import.
82
76%
Does it follow best practices?
Impact
88%
1.04xAverage score across 6 eval scenarios
Advisory
Suggest reviewing before use
Detailed mapping rules for converting source webpage metadata to standard metadata properties.
<link rel="canonical">, <meta property="og:url">, <meta name="twitter:url">.html)canonical:extension: .html<meta name="description">, <meta property="og:description">, <meta name="twitter:description"><meta property="og:image">, <meta property="og:image:secure_url">, <meta name="twitter:image">/default-meta-image.png<title>, <meta property="og:title">, <meta name="twitter:title">| Adobe)title:suffix: | Adobe<meta property="article:tag"> (one per tag)web development, edge delivery, performance<script type="application/ld+json">Source → Property
──────────────────────────────────────────
<title> → title (only if differs from first H1)
og:title → title (if different from <title>)
twitter:title → title (if different from <title>)
Note: Platform auto-populates og:title and twitter:title from titleDecision Logic:
<title>, og:title, twitter:title from sourcetitle property<title>)Examples:
# Scenario 1: Consistent title, differs from H1
Source:
<title>About Us | Acme Corp</title>
<meta property="og:title" content="About Us | Acme Corp">
<meta name="twitter:title" content="About Us | Acme Corp">
Page has H1: "About Our Company"
Metadata:
title: About Us | Acme Corp
Reason: Title is consistent across sources but differs from H1# Scenario 2: Title matches H1
Source:
<title>About Our Company</title>
Page has H1: "About Our Company"
Metadata:
(omit title property)
Reason: Platform will use H1 as default# Scenario 3: Inconsistent titles
Source:
<title>About Us | Acme Corp</title>
<meta property="og:title" content="Learn About Acme Corporation">
Metadata:
title: About Us | Acme Corp
Note: Document the conflict. Chose <title> as primary.
Alternative: Use og:title value if it's better for social sharing.Source → Property
──────────────────────────────────────────
<meta name="description"> → description
og:description → description (if different from meta description)
twitter:description → description (if different from meta description)
Note: Platform auto-populates og:description and twitter:description from descriptionDecision Logic:
description propertyExamples:
# Scenario 1: Consistent description
Source:
<meta name="description" content="Learn about our company history and values">
<meta property="og:description" content="Learn about our company history and values">
Metadata:
description: Learn about our company history and values# Scenario 2: Matches first paragraph
Source:
<meta name="description" content="Welcome to our website">
First paragraph: "Welcome to our website. We are glad you're here."
Metadata:
(consider omitting description)
Note: Platform will use first paragraph. Consider if meta description is sufficient.Source → Property
──────────────────────────────────────────
og:image → image
twitter:image → image (if different from og:image)
Note: Platform auto-populates og:image and twitter:image from imageDecision Logic:
og:image as primary sourcetwitter:image differs → Choose best or documentExamples:
# Scenario 1: Custom social image
Source:
<meta property="og:image" content="https://example.com/social-share.jpg">
First image on page: hero-background.jpg
Metadata:
image: https://example.com/social-share.jpg
Reason: Custom social sharing image differs from first page image# Scenario 2: Matches first image
Source:
<meta property="og:image" content="https://example.com/hero.jpg">
First image on page: https://example.com/hero.jpg
Metadata:
(consider omitting image)
Reason: Platform will use first image as defaultSource → Property
─────────────────────────────────────────────
<link rel="canonical"> → canonical (only if custom URL needed)
og:url → canonical (if consistent with link rel)
twitter:url → canonical (if consistent with link rel)
Note: Platform auto-generates canonical if omittedDecision Logic:
canonical:extension in bulk metadataExamples:
# Scenario 1: Same page canonical
Source:
<link rel="canonical" href="https://example.com/about">
Current page: https://example.com/about
Metadata:
(omit canonical)
Reason: Platform will auto-generate canonical for same page# Scenario 2: Syndicated content
Source:
<link rel="canonical" href="https://originalsource.com/article">
Current page: https://example.com/republished-article
Metadata:
canonical: https://originalsource.com/article
Reason: Points to original source for syndicated contentSource → Property
──────────────────────────────────────────
article:tag (multiple) → tags (comma-separated or bullet list)
keywords → tags (if article:tag not present)Format Options:
tag1, tag2, tag3Examples:
# Scenario 1: Multiple article:tag
Source:
<meta property="article:tag" content="web development">
<meta property="article:tag" content="performance">
<meta property="article:tag" content="edge delivery">
Metadata:
tags: web development, performance, edge delivery# Scenario 2: Keywords fallback
Source:
<meta name="keywords" content="web, development, seo">
(no article:tag present)
Metadata:
tags: web, development, seoSource → Property
──────────────────────────────────────────
author / article:author → author
robots → robots
article:published_time → article:published_time
article:modified_time → article:modified_timeInclude these as-is when present and relevant.
Skip these - they belong in head.html:
viewportcharsetX-UA-Compatibletheme-colorSkip these - platform generates from canonical/title/description:
og:url (if same as canonical)twitter:url (if same as canonical)og:title (if same as title)twitter:title (if same as title)og:description (if same as description)twitter:description (if same as description)titledescriptionkeywords / tagsrobotscanonical (if points elsewhere)og:title → titleog:description → descriptionog:image → imagetwitter:title → titletwitter:description → descriptiontwitter:image → imagearticle:published_time → article:published_time (keep as-is)article:modified_time → article:modified_time (keep as-is)article:author → authorarticle:tag → tagsog:site_nameog:localetwitter:sitecanonical:extensiontitle:suffixWhen:
Example:
{
"@type": "Article",
"headline": "This Page's Title",
"datePublished": "2024-01-15",
"author": "John Doe"
}When:
When:
Example:
{
"@type": "Organization",
"name": "Acme Corp",
"url": "https://example.com"
}Title:
Description:
Image:
Tags:
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
scenario-6
skills
analyze-and-plan
block-collection-and-party
block-inventory
building-blocks
code-review
content-driven-development
content-modeling
docs-search
find-test-content
generate-import-html
identify-page-structure
page-decomposition
page-import
preview-import
scrape-webpage
testing-blocks