I have been neck deep in Adobe Experience Manager lately and keep getting the same SEO questions. These are my field notes. Short. Opinionated. Useful when you have to ship content this week.
Technical choices in AEM that bend search
AEM loves tidy structure. Search does too, but it is picky in different ways. Pick one URL and defend it. If your content is at /content/site/en/product/widget.html, decide whether you serve with the .html extension in public and stick to it. Many teams rewrite to extensionless public paths like /en/product/widget and keep .html behind the Dispatcher. Works fine as long as you enforce it with a clean 301 and block the rest. No soft 404s. If a page is gone, return 404 on the publish tier and let Dispatcher cache that for a short time. Normalize trailing slashes. Pick slash or no slash and redirect the other. Lock it in your Dispatcher rules and in Apache or your CDN. Watch author only URLs leaking to Google with author or editor.html in them. If that happens, robots rules and server side blocks should fix it. And yes, cache is your friend until it lies to you. When you activate or roll back pages, flush at the right granularity so search crawlers do not keep stale canonicals or titles.
One address. One status code. One story.
Templates, components, and author fields
Most SEO wins in AEM start in the template. Put the right fields in Page Properties and make them clear for authors. At minimum you want Title, Page Title, Meta Description, Canonical URL, Robots directives, and social tags for Open Graph and Twitter Cards. Touch UI in 6.1 lets you group these in a single tab so they do not get lost. Pre fill smart defaults pulled from the content tree, but never lock authors out. For canonical, prefer an explicit field and fall back to the request path. Do not auto canonical to the language root or to the blueprint unless you have a real duplicate. Give authors a simple noindex toggle for campaign landers and internal help pages, and make sure it writes to both the robots meta and the X Robots header in publish. Keep the breadcrumb and H1 component separate so writers can match intent rather than template labels. And make sure your header includes only one H1.
Fields are cheap. Governance is not. Train people.
Links, sitemaps, and language
Multi Site Manager can be a gift or a trap. If you use blueprints and live copies, plan your hreflang before the first rollout. Use clear language roots like /en, /es, /fr. Build one sitemap per locale and link them in a sitemap index. Make hreflang reciprocate across all variants and always point each page to itself as the self language value. Do not point local pages to the source market canonical. That kills the local page. For vanity URLs, create Dispatcher or Apache rules that map clean paths to the actual content and return a 301 to the final URL. Avoid internal 302 chains when marketing launches a new product. Keep navigation paths consistent across locales and avoid mixing relative and absolute links that bounce users between languages. If you move a section, ship a 301 map with it. AEM makes it easy to change content paths. Search does not forgive it without a map.
Write the map first. Move the pages second.
JavaScript, crawlers, and what Google says
Google says it can fetch and render. It often can, but not at scale, not quickly, and not on every device. If your AEM site leans on Angular or React in content areas, put primary copy in the HTML you deliver. Use clientlibs for the rest. Avoid hashbang schemes. If you must ship a heavy client app in a content page, add a prerender service on publish so crawlers see a server rendered version. Keep links as real anchors and avoid click handlers as the only way to reach pages. The fastest fix is still the oldest one. Render content on the server and let JS enhance instead of replace.
If you want rankings, do not hide your words behind a spinner.
Speed and mobile
Google rolled out the mobile friendly update in April and hinted at more weight on mobile page quality. AEM can help if you set it up. Use DAM renditions well. Serve the right image size for the viewport by wiring responsive image components to real renditions, not browser scaled monsters. Keep CSS in clientlibs and minify, but version them in the path so you do not break cache with query strings. Turn on gzip at the Dispatcher or CDN. Avoid blocking CSS and JS in robots. If you can use HTTP2 with your delivery tier, do it, but still keep requests lean. Measure on real devices with throttled networks. And when AMP is buzzing in the news, remember it is still early. A clean fast page that renders content first will win more often than not.
Speed is a content feature. Treat it like one.
Tracking without wrecking pages
Analytics and SEO can live together. If you use Adobe DTM to manage tags, keep it async and keep marketing parameters from multiplying paths. Add a canonical that ignores tracking parameters. Whitelist the parameters that matter for content and strip the rest in your Dispatcher rules. Fire pixels without blocking the first paint. And do not place heavy personalization on every page just because you can. Start with the pages that carry revenue or lead goals and keep everything else simple.
Measure what you sell, not every click in the footer.
Practical page audit checklist
When I open a new AEM page, I check five things. URL is stable and matches one pattern with a single 200. Title and H1 say the same thing in different ways. Meta description reads like a human wrote it. Canonical points to itself unless it is a true duplicate. Links and images have real href and src values without JS gates, and images are the right size. If those five pass, the rest tends to follow.
Ship clean pages. Keep your URLs steady. Make authors happy. Search will follow.