All properties on the jcr:content node of an AEM page
JCR Page Properties & jcr:content Node
Learning Objectives
By the end of this page, you will be able to:
- Understand the two-node structure of an AEM page (
cq:Page+jcr:content) - Identify and use the most common JCR properties for page rendering, SEO, and replication
- Distinguish between similar properties (e.g.,
jcr:titlevspageTitlevsnavigationTitle) - Read page properties programmatically using Java and Groovy
What is jcr:content?
Think of an AEM page as a folder with a single file inside it. The folder is the container; the file holds all the actual data. In JCR terms:
cq:Page is just a wrapper. All data lives in jcr:content.
This two-node pattern is fundamental to how AEM works. Every page you create in the Sites console follows this structure. Understanding it is the key to reading, writing, and debugging page content.
Core JCR Properties
These are the properties that AEM and Sling use most frequently to render pages.
jcr:primaryType
Defines the node type. The value determines what the node is and what it can contain.
jcr:title
The title displayed in the AEM UI (Sites console, breadcrumb). This is not the HTML <title> tag.
jcr:title→ Sites console UI displaypageTitle→ HTML<title>tag (if the component uses it)navigationTitle→ Menu/nav label
If you only set jcr:title, most components use it as a fallback for all three.
jcr:description
The meta description for the page. Used by the SEO head component.
sling:resourceType
Points to the component that renders jcr:content. The most important property for Sling rendering.
Sling resolves this by looking up /apps/mysite/components/page/ and finding page.html or the appropriate script.
On AMS (Adobe Managed Services), /libs is not editable. Your custom sling:resourceType must point to /apps, not /libs.
cq:template
The template used to create the page. Affects editable regions when using Editable Templates.
cq:template is only a reference. If the template is deleted, the page still renders normally because sling:resourceType is more important for rendering.
cq:lastModified / cq:lastModifiedBy
Set automatically when an author saves a page. Used for:
- Displaying "Last modified" in the UI
- Dispatcher cache invalidation (if
statfileslevelis configured) - Audit trail
jcr:lastModified / jcr:lastModifiedBy
JCR-level modification, different from CQ-level. Usually equal, but can differ if a node is modified directly via API without going through a CQ workflow.
jcr:created / jcr:createdBy
Read-only after the node is created. Set once and never changes.
Page Metadata Properties
These properties control how the page appears in navigation, search results, and social sharing.
pageTitle
Overrides jcr:title for the HTML <title> tag. If not set, most components fall back to jcr:title.
navigationTitle
Overrides the label shown in navigation components.
hideInNav
Boolean. Hides the page from navigation components (e.g., the Nav component in Core Components).
SEO & Social Properties
cq:tags
Array of tag references pointing to /content/cq:tags/.
Used with the TagManager API to filter pages and display them in Search.
sling:vanityPath
Vanity URL redirect. /content/mysite/en/home → /home.
Sling reads ALL vanity paths at startup and caches them in memory. Too many vanity paths (~10k+) cause slow startup and memory pressure. On AMS, consider using Dispatcher rewrite rules instead.
redirectTarget
Redirects the page to a different URL. Used with RedirectServlet.
Replication Properties
Set by the Replication Agent after publishing or unpublishing. Used to check whether a page has been published and to audit replication history.
cq:lastReplicated / cq:lastReplicatedBy / cq:lastReplicationAction
Design & Styling Properties
cq:designPath
Design path override for static templates (legacy).
Editable Templates do not use cq:designPath. This property is only needed for Static Templates.
Versioning Properties
jcr:isCheckedOut
Workspace versioning. If true, the node is locked by a user.
jcr:baseVersion
Reference to the current version in the version history.
Workflow Properties
cq:wfStatus / cq:wfId
Set by AEM Workflow when a page is in a workflow process.
Custom / App-Specific Properties
Custom properties are defined in component dialogs. Convention:
Common Node Types in jcr:content
Quick Reference: Namespace Meanings
Reading Properties in Java
CRXDE Quick Check
Browse page properties in CRXDE:
Or use the Groovy Console to dump all properties:
Reflection
- If you delete a template from the repository, will the pages created with it still render? Why or why not?
- What is the difference between
cq:lastModifiedandjcr:lastModified? When would they diverge? - How would you check whether a page has been published using the properties discussed here?
What's Next
Now that you understand JCR page properties, explore:
- Sling Models - How to read these properties in Java using the adaptable pattern
- Core Components - How Core Components use these properties to render pages
- AEM Page Manager API - The full Java API for working with pages