Content operations skills for AEM Edge Delivery Services: page auditing, SEO optimization, AI search (GEO), WCAG accessibility, bulk metadata, structured data, sitemap validation, and content diffing. Complements the EDS development skills with operational tooling for content teams.
90%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Sources: Indexing, Indexing reference, Spreadsheets and JSON, Sitemaps, Limits and the Admin API, read in November 2026. Edge Delivery Services changes: check a detail there before you rely on it.
/config/<org>/sites/<site>/content/query.yaml). After a change to the properties, Reindex in the tool reindexes the whole site.target of its definition. /query-index.json is only the default name.raw_index. A sheet named helix-default with a FILTER formula over raw_index can leave out pages, for example those with noindex. This is not available with Document Authoring, AEM authoring or another bring-your-own-markup source: there, filter in the consumer by the robots property.{ "total": 1472, "offset": 0, "limit": 1000, "data": [{ "path": "/…" }], "columns": ["path", "title"], ":type": "sheet" }limit parameter, at most 1000 entries are returned. Page with ?offset=<n>&limit=<n>.| Limit | Value |
|---|---|
| Pages in one index | 50,000 |
| Response payload | 6 MB compressed |
Entries returned without limit | 1000 |
indices:
site:
include:
- /**
exclude:
- /drafts/**
target: /query-index.json
properties:
title:
select: head > meta[property="og:title"]
value: attribute(el, "content")
description:
select: head > meta[name="description"]
value: attribute(el, "content")
image:
select: head > meta[property="og:image"]
value: attribute(el, "content")
robots:
select: head > meta[name="robots"]
value: attribute(el, "content")
lastModified:
select: none
value: parseTimestamp(headers["last-modified"], "ddd, DD MMM YYYY hh:mm:ss GMT")
blog:
include:
- /blog/**
target: /blog/query-index.json
properties:
title:
select: head > meta[property="og:title"]
value: attribute(el, "content")
author:
select: head > meta[name="author"]
value: attribute(el, "content")
tags:
select: head > meta[property="article:tag"]
values: attribute(el, "content")include and exclude decide which pages are indexed. /** matches everything under a prefix and the prefix itself. Without the section, every page is indexed.select is a CSS selector on the delivered HTML. It returns all matches; selectFirst returns the first. Not every selector is supported: the indexer uses hast-util-select.value gives a string, values an array.attribute(el, name), textContent(el), innerHTML(el), match(el, re), words(el, start, end), characters(el, start, end), replace(el, substr, newSubstr), replaceAll(el, substr, newSubstr), parseTimestamp(el, format), dateValue(el, format). Variables: el, path, headers[name].path needs no property: every entry has it.The Index Admin tool offers title, description, image, author, date, category, tags, robots and lastModified. Those whose source is not the meta tag of the same name:
| Property | Source |
|---|---|
title | og:title meta property |
date | publication-date meta tag |
tags | article:tag meta tags, as an array |
lastModified | Last-Modified response header of the page |
| Problem | Cause | What the user does |
|---|---|---|
| The index URL answers 404 | No index has this target. | Check the target in the Index Admin tool. |
| A page is missing | It is not published, it is outside include or inside exclude, or it was published before the definition covered it. | Publish it again. Check the paths of the definition. |
| A property is empty on every page | The select doesn't match the delivered HTML. | View the page source, not the inspector, and fix the selector. Then reindex. |
| A new property is empty on old pages | Only pages published since the change have it. | Reindex in the Index Admin tool. |
| A list shows 1000 entries and no more | The consumer fetches without limit. | Page with offset and limit in the consumer. |
noindex pages are in the sitemap | The index that the sitemap is built from has no robots property. | Add robots to the definition and reindex. |
| The indexer reports errors | A broken expression in the definition. | Filter the Log Viewer by Indexer. |
.tessl-plugin
skills
accessibility-fix
bulk-metadata
content-audit
content-diff
cwv-optimizer
geo-rewrite
heading-optimizer
image-seo
internal-linking
link-rot-scanner
optel-interpreter
performance-budget
product-page-seo
query-index-optimizer
sitemap-audit
structured-data