Frontmatter
| id | 7448 |
| title | Create DocumentHead Addon with Canonical URL Support |
| state | Closed |
| labels | enhancementai |
| assignees | tobiu |
| createdAt | Oct 10, 2025, 10:09 PM |
| updatedAt | Nov 11, 2025, 11:59 AM |
| githubUrl | https://github.com/neomjs/neo/issues/7448 |
| author | tobiu |
| commentsCount | 2 |
| parentIssue | 7446 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Nov 11, 2025, 11:59 AM |
Create DocumentHead Addon with Canonical URL Support
tobiu assigned to @tobiu on Oct 10, 2025, 10:09 PM
tobiu added parent issue #7446 on Oct 10, 2025, 10:09 PM

22Yash
Oct 17, 2025, 4:36 PM
@tobiu I would like to work on this issue!
I understand this is a high-priority SEO task requiring the creation of a Main Thread Addon to dynamically manage the document
content, specifically to fix the duplicate content issue by setting the canonical URL.My plan is:
- Implement
src/main/addon/HeadManager.mjs: Implement thesetTitle,setTag(with logic to find/remove duplicates byname/property/rel), andsetCanonicalmethods, ensuring all are accessible via RMA (Remote Method Access). - Integrate in
ViewportController.mjs: Implement the logic inapps/portal/view/ViewportController.mjsto listen for route changes and call the newHeadManagermethods (especiallysetCanonical) to update the head metadata for the new route.
Please assign this to me. Thank you!
tobiu changed title from Create HeadManager Addon with Canonical URL Support to Create DocumentHead Addon with Canonical URL Support on Nov 11, 2025, 10:02 AM

tobiu
Nov 11, 2025, 10:11 AM
@22Yash sorry, missed your comment. the v11 release was insane. since this was already last month, i will tackle this one on my own.
tobiu closed this issue on Nov 11, 2025, 11:59 AM
To solve the critical duplicate content issue caused by the SPA architecture and multiple deployment environments (dev, prod, esm), a main thread addon is required to dynamically manage the document's
<head>.This is the highest priority task for the SEO epic, as it enables crawlers like Google to correctly index our content by providing a canonical URL.
Acceptance Criteria
src/main/addon/DocumentHead.mjs.setTitle(newTitle): Updates the content of the<title>tag.setTag(tagObject): A smart method that creates or updates a<meta>or<link>tag. It should remove any existing tag with the samenameorpropertybefore adding the new one.setCanonical(url): A dedicated method that creates or updates the<link rel="canonical" href="...">tag.portalapplication controller (apps/portal/view/ViewportController.mjs) must be updated to:HeadManageraddon's methods to update the title, meta description, and, most importantly, the canonical URL for the new route.