From 9fa8fa5390f8fdbb1339621b50ff1a41dc0caa02 Mon Sep 17 00:00:00 2001 From: DIVYA PAHUJA Date: Sat, 7 Feb 2026 23:33:27 +0530 Subject: [PATCH 1/2] feat: Enhance SEO/SMO with dynamic Open Graph tags Added dynamic og:url and og:image generation for better social media previews. --- .../groovy/org/grails/gradle/BlogTask.groovy | 1 + .../org/grails/gradle/RenderSiteTask.groovy | 16 +++++++++++++++- templates/document.html | 6 ++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/buildSrc/src/main/groovy/org/grails/gradle/BlogTask.groovy b/buildSrc/src/main/groovy/org/grails/gradle/BlogTask.groovy index 2e4ca6f0912..eb8e159b36c 100644 --- a/buildSrc/src/main/groovy/org/grails/gradle/BlogTask.groovy +++ b/buildSrc/src/main/groovy/org/grails/gradle/BlogTask.groovy @@ -240,6 +240,7 @@ class BlogTask extends DefaultTask { } String html = writer.toString() Map metadata = htmlPost.metadata.toMap() + metadata['ogurl'] = postLink(htmlPost) html = RenderSiteTask.renderHtmlWithTemplateContent(html, metadata, templateText) html = RenderSiteTask.highlightMenu(html, metadata, htmlPost.path) metadata['body'] = metadata['body'] ? metadata['body'] : '' diff --git a/buildSrc/src/main/groovy/org/grails/gradle/RenderSiteTask.groovy b/buildSrc/src/main/groovy/org/grails/gradle/RenderSiteTask.groovy index 1f311b32b2d..81a75f28dff 100644 --- a/buildSrc/src/main/groovy/org/grails/gradle/RenderSiteTask.groovy +++ b/buildSrc/src/main/groovy/org/grails/gradle/RenderSiteTask.groovy @@ -108,7 +108,9 @@ class RenderSiteTask extends DefaultTask { static void renderPages(Map sitemeta, List listOfPages, File outputDir, final String templateText) { for (Page page : listOfPages) { - Map resolvedMetadata = processMetadata(sitemeta + page.metadata) + String permalink = sitemeta['url'] + page.path + Map pageMeta = sitemeta + page.metadata + [ogurl: permalink] + Map resolvedMetadata = processMetadata(pageMeta) String html = renderHtmlWithTemplateContent(page.content, resolvedMetadata, templateText) html = highlightMenu(html, sitemeta, page.path) if (page.body) { @@ -166,6 +168,18 @@ class RenderSiteTask extends DefaultTask { if (!resolvedMetadata.containsKey("robots")) { resolvedMetadata.put('robots', "all") } + + if (!resolvedMetadata.containsKey('ogimage')) { + if (resolvedMetadata.containsKey('image')) { + resolvedMetadata.put('ogimage', resolvedMetadata['url'] + '/images/' + resolvedMetadata['image']) + } else if (resolvedMetadata.containsKey('video') && parseVideoId(resolvedMetadata)) { + String videoId = parseVideoId(resolvedMetadata) + resolvedMetadata.put('ogimage', "https://img.youtube.com/vi/${videoId}/maxresdefault.jpg".toString()) + } else { + resolvedMetadata.put('ogimage', resolvedMetadata['url'] + '/images/grails.png') + } + } + resolvedMetadata.put('twittercard', twitterCard('summary_large_image')) if (resolvedMetadata.containsKey('video')) { String videoId = parseVideoId(resolvedMetadata) diff --git a/templates/document.html b/templates/document.html index 190bceeb5df..21b688b2f97 100644 --- a/templates/document.html +++ b/templates/document.html @@ -13,10 +13,8 @@ - - - - + + From 98dfc3985663226ffe5d1bfebb682e9f35cc8f13 Mon Sep 17 00:00:00 2001 From: DIVYA PAHUJA Date: Sat, 7 Feb 2026 23:39:39 +0530 Subject: [PATCH 2/2] chore: Add lazy loading to images for better performance --- templates/document.html | 243 ++++++++++++++++++++-------------------- 1 file changed, 120 insertions(+), 123 deletions(-) diff --git a/templates/document.html b/templates/document.html index 21b688b2f97..b7925474391 100644 --- a/templates/document.html +++ b/templates/document.html @@ -1,29 +1,30 @@ + [%title] - - - - - - - + + + + + + + [%twittercard] - - - - - - - - + + + + + + + + - - - - - + + + + + [%HTML header] @@ -33,121 +34,116 @@ - + -
-
- - Show Navigation -
- -
-
-
 
-
-
-
-

Apache Grails is supported by the Apache Software Foundation and the Grails community.

- Apache Software Foundation -

The Apache Software Foundation

-

Apache, Apache Grails, Grails, Groovy, and the ASF logo are either registered trademarks or trademarks - of The Apache Software Foundation. -

- -
- -
-
-
-
+ +
+ +
-
+ - + + \ No newline at end of file