This is an automated email from the ASF dual-hosted git repository.

dpol1 pushed a commit to branch refresh
in repository https://gitbox.apache.org/repos/asf/stormcrawler-site.git

commit 72d9bbd6f411aed2b1444c083bedac064a722f42
Author: Davide Polato <[email protected]>
AuthorDate: Tue Aug 18 16:30:45 2026 +0200

    Add SEO metadata, sitemap, robots, a 404 page and a version setting
    
    head.html now emits the per-page description from front matter (every
    page previously shared the site-wide one), Open Graph and Twitter Card
    tags, JSON-LD on the home page and a correct favicon MIME type. Adds a
    Liquid-generated sitemap.xml, robots.txt, an .htaccess with the 404
    handler and a redirect for /getting-started/, and an on-brand 404 page.
    The current release lives in _config.yml as site.version and the docs/
    javadoc version lists in _data/versions.yml. The layout also gains a
    skip link to the main content.
---
 .htaccess                  |  2 ++
 404.html                   | 20 ++++++++++++++++++++
 _config.yml                |  1 +
 _data/versions.yml         | 12 ++++++++++++
 _includes/head.html        | 44 ++++++++++++++++++++++++++++++++++++++++----
 _layouts/default.html      |  7 +++++--
 getting-started/index.html |  6 ++++++
 robots.txt                 |  4 ++++
 sitemap.xml                |  8 ++++++++
 9 files changed, 98 insertions(+), 6 deletions(-)

diff --git a/.htaccess b/.htaccess
new file mode 100644
index 0000000..61f9363
--- /dev/null
+++ b/.htaccess
@@ -0,0 +1,2 @@
+ErrorDocument 404 /404.html
+Redirect 301 /getting-started/ /docs/latest/index.html
diff --git a/404.html b/404.html
new file mode 100644
index 0000000..f0dbb0d
--- /dev/null
+++ b/404.html
@@ -0,0 +1,20 @@
+---
+layout: default
+slug: home
+title: Page not found - Apache StormCrawler
+description: This page does not exist. The thread you followed leads nowhere.
+permalink: /404.html
+---
+
+<div class="lost">
+  <div class="lost__thread" aria-hidden="true"></div>
+  <img class="lost__mark only-light" src="{{ site.baseurl 
}}/img/spider-mark-light.svg" alt="">
+  <img class="lost__mark only-dark" src="{{ site.baseurl 
}}/img/spider-mark.svg" alt="">
+  <p class="slabel">404 &middot; BROKEN THREAD</p>
+  <h1 class="lost__title">This thread<br>leads nowhere<span class="dot" 
style="color:var(--accent-ink);">.</span></h1>
+  <p class="lost__copy">The page you followed has been moved, retired, or 
never spun. Pick a thread that still holds:</p>
+  <div class="hero__ctas" style="justify-content:center;">
+    <a class="btn btn--solid" href="{{ site.baseurl }}/">Back home</a>
+    <a class="btn btn--ghost" href="{{ site.baseurl }}/docs/">Documentation</a>
+  </div>
+</div>
diff --git a/_config.yml b/_config.yml
index d9c73b1..64fb404 100644
--- a/_config.yml
+++ b/_config.yml
@@ -12,6 +12,7 @@ description: > # this means to ignore newlines until 
"baseurl:"
  Apache StormCrawler is collection of resources for building low-latency, 
scalable web crawlers on Apache Storm
 baseurl: "" # the subpath of your site, e.g. /blog
 url: "https://stormcrawler.apache.org"; # the base hostname & protocol for your 
site
+version: "3.7.0" # current release, referenced site-wide as {{ site.version }}
 
 # Build settings
 markdown: kramdown
diff --git a/_data/versions.yml b/_data/versions.yml
new file mode 100644
index 0000000..514b377
--- /dev/null
+++ b/_data/versions.yml
@@ -0,0 +1,12 @@
+# Documentation and Javadoc versions listed on /docs/.
+# The current release itself lives in _config.yml as site.version.
+docs:
+  - "3.7.0"
+  - "3.6.0"
+  - "3.5.1"
+javadoc:
+  - "3.7.0"
+  - "3.6.0"
+  - "3.5.1"
+  - "3.5.0"
+  - "3.4.0"
diff --git a/_includes/head.html b/_includes/head.html
index 97f7acd..a24e402 100644
--- a/_includes/head.html
+++ b/_includes/head.html
@@ -5,13 +5,49 @@
   <meta name="theme-color" media="(prefers-color-scheme: light)" 
content="#F7F7F3">
   <meta name="theme-color" media="(prefers-color-scheme: dark)" 
content="#141312">
 
-  <title>{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif 
%}</title>
-  <meta name="description" content="{% if page.excerpt %}{{ page.excerpt | 
strip_html | strip_newlines | truncate: 160 }}{% else %}{{ site.description 
}}{% endif %}">
+  {% assign page_title = page.title | default: site.title %}
+  {% assign page_desc = page.description | default: site.description | 
strip_newlines | strip %}
+  {% assign canonical_url = page.url | replace:'index.html','' | prepend: 
site.baseurl | prepend: site.url %}
+  {% assign social_image = '/img/social-card.png' | prepend: site.baseurl | 
prepend: site.url %}
+
+  <title>{{ page_title }}</title>
+  <meta name="description" content="{{ page_desc }}">
+
+  <meta property="og:type" content="website">
+  <meta property="og:site_name" content="{{ site.title }}">
+  <meta property="og:title" content="{{ page_title }}">
+  <meta property="og:description" content="{{ page_desc }}">
+  <meta property="og:url" content="{{ canonical_url }}">
+  <meta property="og:image" content="{{ social_image }}">
+  <meta property="og:image:width" content="1200">
+  <meta property="og:image:height" content="630">
+  <meta property="og:image:alt" content="Apache StormCrawler — every web has 
its spider">
+  <meta name="twitter:card" content="summary_large_image">
+  <meta name="twitter:title" content="{{ page_title }}">
+  <meta name="twitter:description" content="{{ page_desc }}">
+  <meta name="twitter:image" content="{{ social_image }}">
 
   <link rel="stylesheet" href="{{ "/css/main.css" | prepend: site.baseurl }}">
-  <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: 
site.baseurl | prepend: site.url }}">
+  <link rel="canonical" href="{{ canonical_url }}">
   <link rel="alternate" type="application/rss+xml" title="{{ site.title }}" 
href="{{ "/feed.xml" | prepend: site.baseurl | prepend: site.url }}">
-  <link rel="icon" type="/image/png" href="{{ site.baseurl }}/img/favicon.png" 
/>
+  <link rel="icon" type="image/png" href="{{ site.baseurl }}/img/favicon.png">
+  <link rel="sitemap" type="application/xml" href="{{ site.baseurl 
}}/sitemap.xml">
+  {% if page.slug == 'home' %}
+  <script type="application/ld+json">
+  {
+    "@context": "https://schema.org";,
+    "@type": "SoftwareApplication",
+    "name": "Apache StormCrawler",
+    "applicationCategory": "DeveloperApplication",
+    "operatingSystem": "Cross-platform (JVM)",
+    "softwareVersion": "{{ site.version }}",
+    "license": "https://www.apache.org/licenses/LICENSE-2.0";,
+    "url": "{{ site.url }}/",
+    "sameAs": ["https://github.com/apache/stormcrawler";],
+    "description": "{{ page_desc }}"
+  }
+  </script>
+  {% endif %}
   <script>
     (function() {
       var t = localStorage.getItem('theme');
diff --git a/_layouts/default.html b/_layouts/default.html
index dc8c0f6..3f94595 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -5,10 +5,12 @@
 
   <body{% if page.slug %} class="{{ page.slug }}"{% endif %}>
 
+    <a class="skip-link" href="#main">Skip to content</a>
+
     {% include header.html %}
 
     {% if page.slug == 'home' %}
-      <main class="main-content">
+      <main class="main-content" id="main">
         {{ content }}
       </main>
     {% else %}
@@ -24,7 +26,7 @@
           {% if page.description %}<p class="page-hero__sub">{{ 
page.description }}</p>{% endif %}
         </div>
       </div>
-      <main class="main-content page-content">
+      <main class="main-content page-content" id="main">
         {{ content }}
       </main>
     {% endif %}
@@ -56,6 +58,7 @@
     </script>
 
     <script src="{{ site.baseurl }}/js/site.js" defer></script>
+    <script src="https://www.apachecon.com/event-images/snippet.js"; 
defer></script>
 
   </body>
 
diff --git a/getting-started/index.html b/getting-started/index.html
index 86d2226..9b8170d 100644
--- a/getting-started/index.html
+++ b/getting-started/index.html
@@ -2,9 +2,15 @@
 <html lang="en">
 <head>
     <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
     <meta http-equiv="refresh" content="0; 
url=/docs/latest/index.html#_quick_start">
     <link rel="canonical" 
href="https://stormcrawler.apache.org/docs/latest/index.html";>
     <title>Getting Started with Apache StormCrawler</title>
+    <style>
+      body { background: #F7F7F3; color: #191A16; font-family: -apple-system, 
BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; display: 
flex; align-items: center; justify-content: center; min-height: 100vh; margin: 
0; }
+      @media (prefers-color-scheme: dark) { body { background: #141312; color: 
#EDEBE7; } a { color: #E07078; } }
+      a { color: #A32830; }
+    </style>
 </head>
 <body>
     <p>Redirecting to the <a 
href="/docs/latest/index.html#_quick_start">Apache StormCrawler Quick Start 
guide</a>&hellip;</p>
diff --git a/robots.txt b/robots.txt
new file mode 100644
index 0000000..d4897c1
--- /dev/null
+++ b/robots.txt
@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://stormcrawler.apache.org/sitemap.xml
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..1b05e60
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,8 @@
+---
+layout: null
+---
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9";>
+{% for p in site.pages %}{% assign ext = p.url | split: '.' | last %}{% assign 
lastchar = p.url | slice: -1 %}{% if lastchar == '/' or ext == 'html' %}{% 
unless p.url contains '/404' or p.url contains '/getting-started/' %}  
<url><loc>{{ p.url | replace:'index.html','' | prepend: site.baseurl | prepend: 
site.url }}</loc></url>
+{% endunless %}{% endif %}{% endfor %}  <url><loc>{{ site.url }}{{ 
site.baseurl }}/docs/latest/index.html</loc></url>
+</urlset>

Reply via email to