CtrlK
BlogDocsLog inGet started
Tessl Logo
PluginPublic

adobe/aem-eds-content-ops

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.

Quality

90%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

query-index-context.mdskills/query-index-optimizer/references/

Query index: background, definition syntax, troubleshooting

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.

How the index works

  • An index lists the published pages of a part of the site. A page enters or updates when it is published, by Sidekick or by the API alike. It leaves when it is unpublished. Previewing changes nothing.
  • The definition is managed in the Index Admin tool or with the Admin API (/config/<org>/sites/<site>/content/query.yaml). After a change to the properties, Reindex in the tool reindexes the whole site.
  • A site can have several indexes. Each is served at the target of its definition. /query-index.json is only the default name.
  • With SharePoint or Google Drive as the content source, the index can also live in a spreadsheet. The indexer writes the sheet 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.

The response

{ "total": 1472, "offset": 0, "limit": 1000, "data": [{ "path": "/…" }], "columns": ["path", "title"], ":type": "sheet" }
  • Without a limit parameter, at most 1000 entries are returned. Page with ?offset=<n>&limit=<n>.

Limits

LimitValue
Pages in one index50,000
Response payload6 MB compressed
Entries returned without limit1000

Definition syntax

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.
  • Functions: 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:

PropertySource
titleog:title meta property
datepublication-date meta tag
tagsarticle:tag meta tags, as an array
lastModifiedLast-Modified response header of the page

Troubleshooting

ProblemCauseWhat the user does
The index URL answers 404No index has this target.Check the target in the Index Admin tool.
A page is missingIt 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 pageThe 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 pagesOnly pages published since the change have it.Reindex in the Index Admin tool.
A list shows 1000 entries and no moreThe consumer fetches without limit.Page with offset and limit in the consumer.
noindex pages are in the sitemapThe index that the sitemap is built from has no robots property.Add robots to the definition and reindex.
The indexer reports errorsA broken expression in the definition.Filter the Log Viewer by Indexer.

tile.json