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 %} +