Skip to content

feat: template SEO titles and descriptions - #199

Open
imrja8 wants to merge 3 commits into
Dokploy:mainfrom
imrja8:seo/template-meta
Open

imrja8 wants to merge 3 commits into
Dokploy:mainfrom
imrja8:seo/template-meta

Conversation

@imrja8

@imrja8 imrja8 commented Oct 10, 2026 •

Copy link
Copy Markdown
Collaborator

What is this PR about?

SEO improvements for the templates hub page and all individual template pages on dokploy.com/templates.

The Template interface now supports three optional fields: seoTitle, seoDescription, and newConfig. When present in the template data, seoTitle and seoDescription are used for the page <title> tag and <meta name="description">. When absent, the existing formula (Deploy {name} on Dokploy) is used as a fallback, so all 568 templates continue to work without changes.

The newConfig boolean flag enables dynamic configuration section text that includes the template name for specific templates.

The templates hub page (dokploy.com/templates) also has an updated title and meta description targeting the keyword "dokploy templates".

This PR works together with Dokploy/templates PR #1212, which adds the actual seoTitle, seoDescription, and newConfig values to the template meta.json files.

What changed

  • apps/website/lib/templates.ts: Added optional seoTitle, seoDescription, and newConfig fields to the Template interface
  • apps/website/app/templates/[id]/page.tsx: generateMetadata() now uses seoTitle and seoDescription when available, falls back to the existing formula otherwise. The configuration section text now checks the newConfig flag to conditionally include the template name.
  • apps/website/app/templates/page.tsx: Updated the hub page title to "Dokploy Templates: 500+ Open Source Apps" and the meta description to target relevant search keywords

Why these changes?

Currently all template pages use the same title format ("Deploy {name} on Dokploy") and the meta description is auto generated by combining the template description with boilerplate text. This makes every page look the same to search engines and misses high volume keywords like "n8n self hosted" or "jellyfin docker compose".

With these changes, each template page can have a custom title and meta description optimized for the specific keywords people actually search for. The 484 templates without custom SEO fields are completely unaffected since the code falls back to the existing formula.

Why the newConfig conditional approach?

The configuration section text could have been made dynamic for all 568 templates by directly using the template name in the code. However, the original specification only requested this enhancement for 55 specific templates. To respect the defined scope and maintain explicit control over which templates receive this change, a conditional check on the newConfig flag was implemented. This provides granular control while keeping behavior unchanged for templates not marked with the flag.

Checklist

Before submitting this PR, please make sure that:

  • I have read the suggestions in the README.md file
  • I have tested the template in my instance, so the maintainers don't spend time trying to figure out what's wrong.
  • I have added tests that demonstrate that my correction works or that my new feature works.
  • No TypeScript or Biome errors in the changed files. Some pre-existing errors exist in the codebase but are unrelated to these changes.

PR related

Works together with Dokploy/templates PR #1212, which adds the seoTitle, seoDescription, and newConfig data to template meta.json files.

Screenshots or Videos

No visual changes. This PR only updates how the page title, meta description, and configuration section text are generated for template pages.

@imrja8
imrja8 requested a review from Siumauricio as a code owner October 10, 2026 17:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant