SEO optimization
This commit is contained in:
parent
7608cf15fc
commit
7296ffc944
7 changed files with 127 additions and 2 deletions
11
CLAUDE.md
11
CLAUDE.md
|
|
@ -59,6 +59,17 @@ The patterns mirror `~/Code/projects/narayana/www`. Use that repo as a reference
|
||||||
|
|
||||||
`public/id_ed25519.pub` is served from the site. The comment field (currently `ie+2026@asxp.io`) is part of the key file itself; editing the website without regenerating the key file means the website and the file disagree. Keep them in sync, or regenerate the key.
|
`public/id_ed25519.pub` is served from the site. The comment field (currently `ie+2026@asxp.io`) is part of the key file itself; editing the website without regenerating the key file means the website and the file disagree. Keep them in sync, or regenerate the key.
|
||||||
|
|
||||||
|
## Logo placeholder
|
||||||
|
|
||||||
|
The header monogram in `views/index.erb` (inline SVG, "SP" in Hack monospace on a 56×56 dark-grey square) is a **placeholder** awaiting a real logo from a designer friend. When the real logo arrives, swap in this order:
|
||||||
|
|
||||||
|
1. **Drop the asset** into `public/` (e.g. `public/logo.svg` — prefer SVG; PNG fallback if needed).
|
||||||
|
2. **Header in `views/index.erb`** — replace the entire `<div class="monogram">…</div>` block with `<img src="/logo.svg" alt="IE Sergei Poljanski" class="monogram" />`. The `.monogram` CSS class in `public/style.css` (centered, `margin-bottom: 14px`) handles layout — adjust `width`/`height` on the `<img>` if the new logo's proportions differ.
|
||||||
|
3. **Favicons** — replace or supplement `public/hedgehog.png`. The `<link rel="icon">` and `<link rel="apple-touch-icon">` in `views/layout.erb` point at `/hedgehog.png`; update both. Ideally provide 32×32 (favicon) and 180×180 (apple-touch).
|
||||||
|
4. **Open Graph image** — currently absent (Twitter Card type is `summary`, no thumbnail). Add `public/og-card.png` (1200×630, logo + entity name on dark `#121212`), then in `views/layout.erb` add `<meta property="og:image" content="https://asxp.io/og-card.png" />` and change `<meta name="twitter:card" content="summary" />` to `summary_large_image`.
|
||||||
|
|
||||||
|
The hedgehog is the user's pre-IE personal mark; once the IE has its own logo, the hedgehog can stay as-is for old-time's sake or be retired. Ask before retiring it.
|
||||||
|
|
||||||
## Common tasks
|
## Common tasks
|
||||||
|
|
||||||
- **Generate a new SESSION_SECRET:** `openssl rand -hex 64` (then update Forgejo secret).
|
- **Generate a new SESSION_SECRET:** `openssl rand -hex 64` (then update Forgejo secret).
|
||||||
|
|
|
||||||
|
|
@ -110,6 +110,9 @@ class AsxpioWeb < Sinatra::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
get '/thanks' do
|
get '/thanks' do
|
||||||
|
@page_title = 'Thanks — IE Sergei Poljanski'
|
||||||
|
@page_desc = 'Your message has been received. A confirmation copy has been sent to your inbox.'
|
||||||
|
@noindex = true
|
||||||
erb :thanks
|
erb :thanks
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
5
public/robots.txt
Normal file
5
public/robots.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
|
Disallow: /thanks
|
||||||
|
|
||||||
|
Sitemap: https://asxp.io/sitemap.xml
|
||||||
8
public/sitemap.xml
Normal file
8
public/sitemap.xml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>https://asxp.io/</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>1.0</priority>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
||||||
|
|
@ -14,6 +14,14 @@ main {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
}
|
}
|
||||||
|
.monogram {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 14px;
|
||||||
|
line-height: 0;
|
||||||
|
}
|
||||||
|
.monogram svg {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
.header h1 {
|
.header h1 {
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,13 @@
|
||||||
<div class="header">
|
<div class="header">
|
||||||
|
<div class="monogram" aria-hidden="true">
|
||||||
|
<svg viewBox="0 0 64 64" width="56" height="56" role="img">
|
||||||
|
<rect width="64" height="64" rx="6" fill="#1A1A1A" stroke="#2A2A2A" stroke-width="1" />
|
||||||
|
<text x="32" y="42" text-anchor="middle"
|
||||||
|
font-family="Hack, monospace" font-size="28"
|
||||||
|
font-weight="600" fill="#888888"
|
||||||
|
letter-spacing="-1">SP</text>
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
<h1>DevOps & infrastructure engineering — IE Sergei Poljanski, Tbilisi.</h1>
|
<h1>DevOps & infrastructure engineering — IE Sergei Poljanski, Tbilisi.</h1>
|
||||||
<span class="ka">ინდ. მეწარმე სერგეი პოლჯანსკი</span>
|
<span class="ka">ინდ. მეწარმე სერგეი პოლჯანსკი</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,94 @@
|
||||||
|
<% page_title = (defined?(@page_title) && @page_title) || 'IE Sergei Poljanski — DevOps & Infrastructure Engineering, Tbilisi' %>
|
||||||
|
<% page_desc = (defined?(@page_desc) && @page_desc) || 'DevOps and infrastructure engineering by IE Sergei Poljanski — Estonian-born EU citizen, based in Tbilisi, Georgia. Docker, Kubernetes, Terraform, Ansible, CI/CD, monitoring. Worldwide clients.' %>
|
||||||
|
<% noindex = defined?(@noindex) && @noindex %>
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>IE Sergei Poljanski</title>
|
|
||||||
|
<title><%= page_title %></title>
|
||||||
|
<meta name="description" content="<%= page_desc %>" />
|
||||||
|
<meta name="author" content="Sergei Poljanski" />
|
||||||
|
<% if noindex %>
|
||||||
|
<meta name="robots" content="noindex, nofollow" />
|
||||||
|
<% else %>
|
||||||
|
<meta name="robots" content="index, follow" />
|
||||||
|
<% end %>
|
||||||
|
<link rel="canonical" href="https://asxp.io<%= request.path %>" />
|
||||||
|
|
||||||
|
<!-- Open Graph -->
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta property="og:site_name" content="IE Sergei Poljanski" />
|
||||||
|
<meta property="og:title" content="<%= page_title %>" />
|
||||||
|
<meta property="og:description" content="<%= page_desc %>" />
|
||||||
|
<meta property="og:url" content="https://asxp.io<%= request.path %>" />
|
||||||
|
<meta property="og:locale" content="en_US" />
|
||||||
|
|
||||||
|
<!-- Twitter Card -->
|
||||||
|
<meta name="twitter:card" content="summary" />
|
||||||
|
<meta name="twitter:title" content="<%= page_title %>" />
|
||||||
|
<meta name="twitter:description" content="<%= page_desc %>" />
|
||||||
|
|
||||||
|
<!-- Favicons -->
|
||||||
|
<link rel="icon" type="image/png" href="/hedgehog.png" sizes="32x32" />
|
||||||
|
<link rel="apple-touch-icon" href="/hedgehog.png" />
|
||||||
|
|
||||||
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans">
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans">
|
||||||
<link rel='stylesheet' href='//cdn.jsdelivr.net/npm/hack-font@3.3.0/build/web/hack-subset.css'>
|
<link rel='stylesheet' href='//cdn.jsdelivr.net/npm/hack-font@3.3.0/build/web/hack-subset.css'>
|
||||||
<link rel="icon" type="image/png" href="/hedgehog.png" sizes="32x32" />
|
|
||||||
<link rel="stylesheet" href="/style.css" />
|
<link rel="stylesheet" href="/style.css" />
|
||||||
|
|
||||||
|
<!-- Structured data: Organization + Person -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@graph": [
|
||||||
|
{
|
||||||
|
"@type": "Organization",
|
||||||
|
"@id": "https://asxp.io/#organization",
|
||||||
|
"name": "IE Sergei Poljanski",
|
||||||
|
"alternateName": ["SERGEI POLJANSKI", "ინდ. მეწარმე სერგეი პოლჯანსკი"],
|
||||||
|
"url": "https://asxp.io",
|
||||||
|
"email": "ie@asxp.io",
|
||||||
|
"telephone": "+995595026471",
|
||||||
|
"taxID": "304813343",
|
||||||
|
"address": {
|
||||||
|
"@type": "PostalAddress",
|
||||||
|
"streetAddress": "Ilia and Nino Nakashidze St, N 1, Building N3, Apt N3",
|
||||||
|
"addressLocality": "Tbilisi",
|
||||||
|
"addressRegion": "Krtsanisi",
|
||||||
|
"addressCountry": "GE"
|
||||||
|
},
|
||||||
|
"founder": { "@id": "https://asxp.io/#person" },
|
||||||
|
"sameAs": [
|
||||||
|
"https://git.czsk.it/asxpi/asxpio",
|
||||||
|
"https://github.com/asxpi",
|
||||||
|
"https://www.linkedin.com/in/asxpi"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Person",
|
||||||
|
"@id": "https://asxp.io/#person",
|
||||||
|
"name": "Sergei Poljanski",
|
||||||
|
"url": "https://asxp.io",
|
||||||
|
"email": "ie@asxp.io",
|
||||||
|
"nationality": { "@type": "Country", "name": "Estonia" },
|
||||||
|
"worksFor": { "@id": "https://asxp.io/#organization" },
|
||||||
|
"jobTitle": "DevOps & Infrastructure Engineer",
|
||||||
|
"knowsAbout": [
|
||||||
|
"DevOps", "Site Reliability Engineering", "Kubernetes", "Docker",
|
||||||
|
"Terraform", "Ansible", "CI/CD", "Linux", "NixOS",
|
||||||
|
"Prometheus", "Grafana", "Loki", "Infrastructure as Code"
|
||||||
|
],
|
||||||
|
"sameAs": [
|
||||||
|
"https://git.czsk.it/asxpi/asxpio",
|
||||||
|
"https://github.com/asxpi",
|
||||||
|
"https://www.linkedin.com/in/asxpi"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<main>
|
<main>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue