diff --git a/.eleventy.js b/.eleventy.js
index b208c7f7..b6224980 100644
--- a/.eleventy.js
+++ b/.eleventy.js
@@ -2,6 +2,10 @@ const yaml = require("js-yaml");
module.exports = (eleventyConfig) => {
eleventyConfig.addShortcode("currentYear", () => new Date().getFullYear());
+ eleventyConfig.addFilter("safeJsonLd", (value) => {
+ const json = JSON.stringify(value) ?? "null";
+ return json.replace(/<\//g, "<\\/");
+ });
// Add this line to copy your external assets
eleventyConfig.addPassthroughCopy("src/assets");
// 1. Recognize YAML as a template format
diff --git a/src/_data/site.js b/src/_data/site.js
new file mode 100644
index 00000000..f0de05fc
--- /dev/null
+++ b/src/_data/site.js
@@ -0,0 +1,9 @@
+module.exports = {
+ name: "NextCommunity Developer Directory",
+ author: "NextCommunity",
+ url: "https://nextcommunity.github.io",
+ locale: "en_US",
+ themeColor: "#2563eb",
+ twitterCard: "summary_large_image",
+ defaultImage: "/assets/img/next.jpeg",
+};
diff --git a/src/_includes/bio.njk b/src/_includes/bio.njk
index 7865a452..b6a2e143 100644
--- a/src/_includes/bio.njk
+++ b/src/_includes/bio.njk
@@ -3,7 +3,29 @@
- {{ name }} | {{ role }}
+ {% set seoBioDescription = bio
+ and (bio
+ | replace('\r', ' ')
+ | replace('\n', ' ')
+ | replace('\t', ' ')
+ | replace('"', "'")
+ | trim
+ | truncate(160))
+ or "" %}
+ {% set seo = {
+ title: name + " | " + role + " | NextCommunity",
+ description: (seoBioDescription or ("Explore " + name + "'s developer profile, skills, and social links on NextCommunity.")),
+ keywords: "developer profile, " + name + ", " + role + ", github profile, software developer portfolio",
+ type: "profile",
+ image: site.defaultImage,
+ person: {
+ name: name,
+ role: role,
+ github: github,
+ linkedin: linkedin
+ }
+ } %}
+ {% include "seo-meta.njk" %}
diff --git a/src/_includes/seo-meta.njk b/src/_includes/seo-meta.njk
new file mode 100644
index 00000000..75fd6eab
--- /dev/null
+++ b/src/_includes/seo-meta.njk
@@ -0,0 +1,86 @@
+{% set siteUrl = site.url or "https://nextcommunity.github.io" %}
+{% set pagePath = page.url or "/" %}
+{% set canonicalUrl = siteUrl + pagePath %}
+{% set seoTitle = seo.title or (site.name + " | Open Source Profiles") %}
+{% set seoDescription = seo.description or "Discover and connect with open-source developers in the NextCommunity global talent directory." %}
+{% set seoKeywords = seo.keywords or "developer directory, open source developers, software engineers, github profiles, tech community" %}
+{% set seoType = seo.type or "website" %}
+{% set imagePath = seo.image or site.defaultImage %}
+{% if imagePath and imagePath[0] == "/" %}
+ {% set imageUrl = siteUrl + imagePath %}
+{% else %}
+ {% set imageUrl = imagePath %}
+{% endif %}
+
+{{ seoTitle | escape }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{% if seo.person %}
+
+{% endif %}
diff --git a/src/games.njk b/src/games.njk
index 067e3966..dc385c6d 100644
--- a/src/games.njk
+++ b/src/games.njk
@@ -7,7 +7,14 @@ permalink: /games/
- Arcade | Developer Directory
+ {% set seo = {
+ title: "Developer Arcade | Coding Games, XP, and Achievements",
+ description: "Play coding mini-games, earn XP, and unlock achievements in the NextCommunity Developer Arcade.",
+ keywords: "developer games, coding arcade, programming mini games, developer xp, gamified coding",
+ type: "website",
+ image: "/assets/img/next.jpeg"
+ } %}
+ {% include "seo-meta.njk" %}
diff --git a/src/index.njk b/src/index.njk
index d11b8a26..b2c45845 100644
--- a/src/index.njk
+++ b/src/index.njk
@@ -6,7 +6,14 @@ layout: false
- Developer Directory
+ {% set seo = {
+ title: "NextCommunity Developer Directory | Discover Open-Source Talent",
+ description: "Explore developer profiles from around the world, discover skills, and connect with open-source contributors in the NextCommunity directory.",
+ keywords: "developer directory, open source developers, software engineers, github developers, developer community, global tech talent",
+ type: "website",
+ image: "/assets/img/next.jpeg"
+ } %}
+ {% include "seo-meta.njk" %}
diff --git a/src/robots.njk b/src/robots.njk
new file mode 100644
index 00000000..f23d4033
--- /dev/null
+++ b/src/robots.njk
@@ -0,0 +1,7 @@
+---
+permalink: /robots.txt
+eleventyExcludeFromCollections: true
+---
+User-agent: *
+Allow: /
+Sitemap: {{ site.url }}/sitemap.xml
diff --git a/src/sitemap.njk b/src/sitemap.njk
new file mode 100644
index 00000000..6d374012
--- /dev/null
+++ b/src/sitemap.njk
@@ -0,0 +1,17 @@
+---
+permalink: /sitemap.xml
+eleventyExcludeFromCollections: true
+---
+
+
+{% for entry in collections.all %}
+ {% if entry.url and entry.url != "/404.html" %}
+
+ {{ site.url | escape }}{{ entry.url | escape }}
+ {% if entry.date %}
+ {{ entry.date.toISOString().split('T')[0] }}
+ {% endif %}
+
+ {% endif %}
+{% endfor %}
+