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 · 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>…</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>
