feat(seo): add security.txt, humans.txt, Schema.org JSON-LD

- public/.well-known/security.txt (RFC 9116): контакты для responsible disclosure
- public/humans.txt: команда и стек
- BaseLayout.astro: JSON-LD WebSite (SearchAction) + NewsMediaOrganization (sameAs из SOCIAL)
This commit is contained in:
Dmitry Gusev
2026-05-21 13:41:27 +03:00
parent 8cab51d590
commit 86d2aa6c14
3 changed files with 48 additions and 1 deletions

View File

@@ -0,0 +1,6 @@
Contact: mailto:admin@anotherreflections.ru
Contact: https://anotherreflections.ru/kontakty
Expires: 2027-05-21T00:00:00.000Z
Preferred-Languages: ru, en
Canonical: https://anotherreflections.ru/.well-known/security.txt
Policy: https://anotherreflections.ru/privacy

10
public/humans.txt Normal file
View File

@@ -0,0 +1,10 @@
/* SITE */
Site: Иные Отражения — anotherreflections.ru
Last update: 2026-05-21
Standards: HTML5, CSS3, RSS 2.0
Components: Astro 5, nginx 1.29
Software: Docker, Gitea Actions
/* TEAM */
Maintained by: HHIVP
Contact: admin@anotherreflections.ru

View File

@@ -1,6 +1,6 @@
--- ---
import '../styles/global.css'; import '../styles/global.css';
import { SITE_TITLE, SITE_DESCRIPTION, SITE_URL, SITE_LANG, MAIN_NAV } from '../consts'; import { SITE_TITLE, SITE_DESCRIPTION, SITE_URL, SITE_LANG, SITE_FOUNDED, MAIN_NAV, SOCIAL } from '../consts';
import BrandMark from '../components/BrandMark.astro'; import BrandMark from '../components/BrandMark.astro';
import SocialLinks from '../components/SocialLinks.astro'; import SocialLinks from '../components/SocialLinks.astro';
import Analytics from '../components/Analytics.astro'; import Analytics from '../components/Analytics.astro';
@@ -17,6 +17,35 @@ const pageTitle = title ? `${title} — ${SITE_TITLE}` : SITE_TITLE;
const pageDesc = description || SITE_DESCRIPTION; const pageDesc = description || SITE_DESCRIPTION;
const canonical = new URL(Astro.url.pathname, SITE_URL).toString(); const canonical = new URL(Astro.url.pathname, SITE_URL).toString();
const year = new Date().getFullYear(); const year = new Date().getFullYear();
const ogImage = new URL('/og-image.png', SITE_URL).toString();
const logoUrl = new URL('/logo.svg', SITE_URL).toString();
const jsonLd = [
{
'@context': 'https://schema.org',
'@type': 'WebSite',
name: SITE_TITLE,
url: SITE_URL,
inLanguage: SITE_LANG,
description: SITE_DESCRIPTION,
potentialAction: {
'@type': 'SearchAction',
target: `${SITE_URL}/?s={query}`,
'query-input': 'required name=query',
},
},
{
'@context': 'https://schema.org',
'@type': 'NewsMediaOrganization',
name: SITE_TITLE,
url: SITE_URL,
logo: logoUrl,
image: ogImage,
description: SITE_DESCRIPTION,
foundingDate: String(SITE_FOUNDED),
sameAs: Object.values(SOCIAL).map((s) => s.url),
},
];
--- ---
<!doctype html> <!doctype html>
<html lang={SITE_LANG}> <html lang={SITE_LANG}>
@@ -46,6 +75,8 @@ const year = new Date().getFullYear();
<link rel="alternate" type="application/rss+xml" title={`${SITE_TITLE} — RSS`} href="/feed.xml" /> <link rel="alternate" type="application/rss+xml" title={`${SITE_TITLE} — RSS`} href="/feed.xml" />
<script type="application/ld+json" is:inline set:html={JSON.stringify(jsonLd)} />
<link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Cormorant+Garamond:wght@500;600;700&display=swap" rel="stylesheet" /> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Cormorant+Garamond:wght@500;600;700&display=swap" rel="stylesheet" />