mirror of
https://github.com/bherbruck/solidcraft.git
synced 2026-11-05 11:35:55 +00:00
e438a9bbea
The web app is now offered at /app/ (latest release), /app-rc/ (newest release candidate) and /app-edge/ (current main), each with its own browser storage. /app/ is built from the latest release's web zip instead of main.
34 lines
1.5 KiB
Bash
Executable File
34 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Adds <link rel="canonical"> to every built book page and writes robots.txt and sitemap.xml.
|
|
# mdBook's templates cannot turn a chapter's .md path into its .html URL, so this runs on the built
|
|
# tree (usage: seo.sh <book-dir>). index.html and introduction.html are the same page: both point at /.
|
|
set -euo pipefail
|
|
dir="${1:?usage: seo.sh <built-book-dir>}"
|
|
base="https://docs.solidcraft.io"
|
|
cd "$dir"
|
|
urls=()
|
|
while IFS= read -r f; do
|
|
f="${f#./}"
|
|
case "$f" in
|
|
404.html|toc.html) # not content pages: keep them out of the index
|
|
sed -i 's|</head>|<meta name="robots" content="noindex"></head>|' "$f"; continue ;;
|
|
esac
|
|
grep -q 'rel="canonical"' "$f" && continue # mdBook's redirect stubs already name their target
|
|
case "$f" in
|
|
index.html|introduction.html) path="" ;;
|
|
*/index.html) path="${f%index.html}" ;;
|
|
*) path="$f" ;;
|
|
esac
|
|
url="$base/$path"
|
|
sed -i "s|</head>|<link rel=\"canonical\" href=\"$url\"></head>|" "$f"
|
|
[ "$f" = print.html ] || [ "$f" = introduction.html ] || urls+=("$url")
|
|
done < <(find . -name '*.html' | sort)
|
|
{
|
|
echo '<?xml version="1.0" encoding="UTF-8"?>'
|
|
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
|
|
for u in "${urls[@]}"; do echo " <url><loc>$u</loc></url>"; done
|
|
echo '</urlset>'
|
|
} > sitemap.xml
|
|
# The release candidate and edge web apps can break: keep them out of search results.
|
|
printf 'User-agent: *\nAllow: /\nDisallow: /app-rc/\nDisallow: /app-edge/\n\nSitemap: %s/sitemap.xml\n' "$base" > robots.txt
|