Theme Development Best Practices
On this page
1. Performance Optimization
<!-- Optimize images with proper attributes -->
<img
src="/content/uploads{{featuredImage.url}}"
alt="{{featuredImage.alt | defaults(title)}}"
loading="lazy"
width="{{featuredImage.width}}"
height="{{featuredImage.height}}"
/>
<!-- Minimize template processing with set variables -->
{{#set currentYear = year}}
<!---->
{{#set siteTitle = site.siteTitle}}
<!---->
{{#set themePath = "/content/themes/" + theme.name}}
<!-- Use efficient conditionals -->
{{#if posts}} {{#set postsExist = true}} {{#else}} {{#set postsExist = false}} {{/if}}
2. Accessibility
<!-- Semantic HTML structure -->
<main role="main" aria-label="Main content">
<article role="article">
<header>
<h1>{{metadata.title}}</h1>
</header>
<div class="content" role="region" aria-label="Article content">{{content}}</div>
</article>
</main>
<!-- Proper navigation landmarks -->
<nav role="navigation" aria-label="Main navigation">{{html_menu}}</nav>
<nav role="navigation" aria-label="Pagination">{{#include("partials/pagination.html")}}</nav>
<!-- Screen reader friendly content -->
<span class="sr-only">Published on</span>
<time datetime="{{metadata.createdAt}}">{{metadata.createdAt | dateFormat("MMMM D, YYYY")}}</time>
3. SEO Optimization
<!-- Dynamic meta tags -->
<title>
{{#if metadata.seoTitle}} {{metadata.seoTitle}} {{#elseif metadata.title}} {{metadata.title}} | {{site.siteTitle}}
{{#else}} {{site.siteTitle}} {{/if}}
</title>
<meta name="description" content="{{metadata.seoDescription || metadata.excerpt || site.siteDescription}}" />
<!-- Open Graph tags -->
{{#if metadata.featuredImage}}
<meta property="og:image" content="{{site.siteUrl}}/content/uploads{{metadata.featuredImage.url}}" />
<meta property="og:image:alt" content="{{metadata.featuredImage.alt | defaults(metadata.title)}}" />
{{/if}}
<!-- Structured data -->
{{#if contentRoute && fileType == "post"}}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "{{metadata.title}}",
"datePublished": "{{metadata.createdAt}}",
"dateModified": "{{metadata.updatedAt | defaults(metadata.createdAt)}}",
"author": {
"@type": "Person",
"name": "{{metadata.author | defaults('Admin')}}"
}
}
</script>
{{/if}}