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.
|
||||
|
||||
## 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
|
||||
|
||||
- **Generate a new SESSION_SECRET:** `openssl rand -hex 64` (then update Forgejo secret).
|
||||
|
|
|
|||
|
|
@ -110,6 +110,9 @@ class AsxpioWeb < Sinatra::Base
|
|||
end
|
||||
|
||||
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
|
||||
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;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.monogram {
|
||||
display: inline-block;
|
||||
margin-bottom: 14px;
|
||||
line-height: 0;
|
||||
}
|
||||
.monogram svg {
|
||||
display: block;
|
||||
}
|
||||
.header h1 {
|
||||
font-size: 1.4rem;
|
||||
font-weight: 400;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,13 @@
|
|||
<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>
|
||||
<span class="ka">ინდ. მეწარმე სერგეი პოლჯანსკი</span>
|
||||
</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>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<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='//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" />
|
||||
|
||||
<!-- 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>
|
||||
<body>
|
||||
<main>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue