Przeglądaj źródła

SEO pass: canonical, OG/Twitter tags, JSON-LD, sitemap, robots, 404 page

Head metadata moves from app.html into the page head; adds og-image,
Organization/WebSite JSON-LD, static sitemap.xml + robots.txt, a
noindex 404 page, dist/ output and a deploy.sh for Pages project
keystoneintel-v2.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
AusPrinzip 3 tygodni temu
rodzic
commit
3bf74a8014

+ 12 - 0
deploy.sh

@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+# Build and deploy to Cloudflare Pages project "keystoneintel-v2" (https://keystoneintel.net).
+# Needs API_PROXY_URL/API_PROXY_TOKEN — from the digitalmar .env or the environment.
+set -euo pipefail
+cd "$(dirname "$0")"
+
+set -a
+[ -f "$HOME/coding/digitalmar/.env" ] && source "$HOME/coding/digitalmar/.env"
+set +a
+
+npm run build
+node "$HOME/coding/digitalmar/tools/deploy-pages.js" . keystoneintel-v2

+ 1 - 2
src/app.html

@@ -3,12 +3,11 @@
 	<head>
 		<meta charset="utf-8" />
 		<meta name="viewport" content="width=device-width, initial-scale=1" />
-		<meta name="description" content="KeystoneIntel — Premier data intelligence and signal brokerage firm serving the world's most demanding institutions." />
+		<meta name="theme-color" content="#0f2044" />
 		<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90' fill='%230f2044'>K</text></svg>" />
 		<link rel="preconnect" href="https://fonts.googleapis.com" />
 		<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
 		<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,600;0,700;1,400;1,600&family=Source+Sans+3:wght@300;400;600&display=swap" rel="stylesheet" />
-		<title>KeystoneIntel — Intelligence. Precision. Advantage.</title>
 		%sveltekit.head%
 	</head>
 	<body data-sveltekit-preload-data="hover">

+ 21 - 0
src/routes/+page.svelte

@@ -118,6 +118,27 @@
 	];
 </script>
 
+<svelte:head>
+	<title>KeystoneIntel — Intelligence. Precision. Advantage.</title>
+	<meta name="description" content="KeystoneIntel — Premier data intelligence and signal brokerage firm serving the world's most demanding institutions." />
+	<link rel="canonical" href="https://keystoneintel.net/" />
+	<meta property="og:site_name" content="KeystoneIntel" />
+	<meta property="og:type" content="website" />
+	<meta property="og:url" content="https://keystoneintel.net/" />
+	<meta property="og:title" content="KeystoneIntel — Intelligence. Precision. Advantage." />
+	<meta property="og:description" content="KeystoneIntel — Premier data intelligence and signal brokerage firm serving the world's most demanding institutions." />
+	<meta property="og:image" content="https://keystoneintel.net/og-image.jpg" />
+	<meta property="og:image:width" content="1200" />
+	<meta property="og:image:height" content="630" />
+	<meta property="og:locale" content="en_US" />
+	<meta name="twitter:card" content="summary_large_image" />
+	<meta name="twitter:title" content="KeystoneIntel — Intelligence. Precision. Advantage." />
+	<meta name="twitter:description" content="KeystoneIntel — Premier data intelligence and signal brokerage firm serving the world's most demanding institutions." />
+	<meta name="twitter:image" content="https://keystoneintel.net/og-image.jpg" />
+	{@html `<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://keystoneintel.net/#org","name":"KeystoneIntel","url":"https://keystoneintel.net/","logo":"https://keystoneintel.net/og-image.jpg","image":"https://keystoneintel.net/og-image.jpg","description":"KeystoneIntel — Premier data intelligence and signal brokerage firm serving the world's most demanding institutions.","founder":{"@type":"Person","name":"Peter Kazan","url":"https://peterkazan.org/"}},{"@type":"WebSite","@id":"https://keystoneintel.net/#website","url":"https://keystoneintel.net/","name":"KeystoneIntel","publisher":{"@id":"https://keystoneintel.net/#org"}}]}${'<'}/script>`}
+</svelte:head>
+
+
 <!-- ═══════════════════════════════════════════════════ UTILITY BAR -->
 <div style="background: var(--color-navy); border-bottom: 1px solid var(--color-navy-mid);">
 	<div class="max-w-7xl mx-auto px-6 h-9 flex items-center justify-between">

+ 30 - 0
src/routes/404/+page.svelte

@@ -0,0 +1,30 @@
+<svelte:head>
+	<title>Page Not Found — KeystoneIntel</title>
+	<meta name="robots" content="noindex" />
+</svelte:head>
+
+<section class="hero-bg relative flex items-center overflow-hidden" style="min-height: 100vh;">
+	<div class="absolute left-0 top-0 bottom-0 w-1" style="background: var(--color-gold);"></div>
+	<div
+		class="absolute right-0 bottom-0 select-none pointer-events-none leading-none"
+		style="font-family: var(--font-heading); font-size: 28vw; font-weight: 700; color: rgba(255,255,255,0.025); line-height: 0.85; right: -2vw; bottom: -2vw;"
+		aria-hidden="true"
+	>404</div>
+	<div class="relative z-10 max-w-7xl mx-auto px-6 sm:px-12 py-20 w-full">
+		<div class="max-w-3xl mx-auto sm:mx-0 text-center sm:text-left">
+			<a href="/" class="font-heading font-700 text-xl" style="color: var(--color-white);">KeystoneIntel</a>
+			<div class="overline mt-12 mb-4 sm:mb-5" style="color: var(--color-gold);">Error 404</div>
+			<h1 class="font-heading font-700 leading-[1.05] mb-5" style="font-size: clamp(2rem, 5.5vw, 4.2rem); color: var(--color-white);">
+				No Signal<br />
+				<em style="font-style: italic; color: var(--color-gold-light);">At This Address.</em>
+			</h1>
+			<p class="mb-9 max-w-xl mx-auto sm:mx-0" style="font-size: 1.1rem; line-height: 1.6; color: rgba(255,255,255,0.7);">
+				The page you requested has moved or never existed. Return to the homepage or initiate a secure inquiry.
+			</p>
+			<div class="flex flex-wrap gap-4 justify-center sm:justify-start">
+				<a href="/" class="btn-gold">Back to Homepage</a>
+				<a href="/#contact" class="btn-outline">Secure Inquiry</a>
+			</div>
+		</div>
+	</div>
+</section>

BIN
static/og-image.jpg


+ 4 - 0
static/robots.txt

@@ -0,0 +1,4 @@
+User-agent: *
+Allow: /
+
+Sitemap: https://keystoneintel.net/sitemap.xml

+ 7 - 0
static/sitemap.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+	<url>
+		<loc>https://keystoneintel.net/</loc>
+		<lastmod>2026-09-19</lastmod>
+	</url>
+</urlset>

+ 1 - 1
svelte.config.js

@@ -3,7 +3,7 @@ import adapter from '@sveltejs/adapter-static';
 /** @type {import('@sveltejs/kit').Config} */
 const config = {
 	kit: {
-		adapter: adapter({ fallback: undefined })
+		adapter: adapter({ pages: 'dist', assets: 'dist', fallback: undefined, precompress: false })
 	}
 };