EN · ORIGINAL REPOSITORY DOCUMENT
Website SEO configuration
Original English text. Commands and evidence apply to the revision and environment stated in the document.
product/site/SEO.md
On this page
Technical SEO and local indexing policy
No public domain has been selected. The normal local build intentionally uses
noindex, follow on every HTML page, contains no guessed canonical origin, and
serves an empty XML sitemap. Go repeats noindex in the HTTP header. The service
is bound to loopback. No Search Console submission, DNS or public deployment is
performed by these build settings.
Build-time settings
scripts/site-settings.mjs is shared by Astro configuration and page metadata.
Set environment variables in the process that builds the site:
| Setting | Default | Meaning |
|---|---|---|
SITE_URL |
unset | Chosen HTTPS origin only, without path, port, query or credentials |
SITE_INDEXING |
disabled | Set exactly enabled only for the intended public build |
With a domain but indexing disabled, canonical/social/dialect metadata remains
testable while every page stays noindex and the sitemap stays empty. Enabling
indexing without a domain fails the build. Local, IP, .test and .invalid
origins are rejected as canonical hosts. No address is inferred from Host headers.
After a domain has actually been selected, use its exact HTTPS origin in
SITE_URL; rebuild Astro and restart whichever server snapshots dist.
This configures metadata only; the current local account provider and deployment
boundary remain local. Domain settings do not enable public account hosting.
Implemented output
- Page-specific titles and descriptions in Turkish and English, descriptive document summaries, Open Graph and Twitter summary metadata, local SVG favicon.
- Absolute canonical URLs and reciprocal
tr,en,x-defaultlinks for the translated public pages. Tracking/query parameters do not enter canonical URLs. /preserves the Turkish homepage and canonicalizes to/tr/. It is omitted from the sitemap as a duplicate.- The original reference documents remain English beneath both navigation languages. Their Turkish interface is preserved, but both versions canonicalize to the English document. Only the English document enters the sitemap; no untranslated document is advertised as a Turkish translation.
- Account, checkout, demo and 404 pages always use
noindex; the private operator console usesnoindex, nofollow, is unlinked and is never listed in robots.txt. These pages carry no canonical/hreflang/schema suggesting a public document, and never enter the sitemap. Authentication protects the API separately. - Visible breadcrumb navigation and matching
BreadcrumbListJSON-LD. Homepages describeWebSite; public pages useWebPageorTechArticle. No fabricated ratings, sale offers, reviews or organization details are emitted. /robots.txtpermits crawling so crawlers can readnoindex. In the public build it names the sitemap; blocking those HTML pages in robots would hide their indexing instruction./sitemap.xmlcontains 56 unique canonical public URLs in the configured indexable build. Dates are not fabricated from the time of every build.- Go serves XML/text with correct types, real 404 responses (including the direct
/404.htmlURL), slash-normalizing 308 responses preserving queries, and immutable caching for content-hashed Astro assets. - Each HTML response receives only its own inline script hashes in CSP. JSON-LD
is permitted without
unsafe-inlineor a site-wide expanding hash header.
Reproduce checks
From product/site:
npm run check
npm run test:unit
npm run build
python scripts/audit-seo.py --report ../../build/seo/local-files.json
To test configured metadata without publishing anything, run in a separate shell using the reserved example domain below, then restore the local build afterwards:
$env:SITE_URL = 'https://seo-validation.example.com'
$env:SITE_INDEXING = 'enabled'
npm run build
python scripts/audit-seo.py --mode indexable --origin https://seo-validation.example.com --report ../../build/seo/indexable-files.json
Remove-Item Env:SITE_URL
Remove-Item Env:SITE_INDEXING
npm run build
The audit reads the actual generated HTML, not just source helpers. It checks
titles/descriptions, exactly one H1, language, indexability, canonical and
reciprocal language links, social metadata, parsed structured data, sitemap
membership, internal links and fragment targets. Add --base http://127.0.0.1:8766 to inspect the running Go site’s status codes, content types,
HTTP noindex and all inline-script CSP hashes. Rebuild/restart Go first so it
serves the same build being audited. Reports are stored under ignored build/seo.
Evidence and limits
The indexable test build passed 6,850 checks over HTTP on 2026-10-04: 90 HTML
pages, 56 sitemap URLs, 4,087 internal links, no failures. Local mode and
persistence verification are recorded in ASTRO-BROWSER-QA.md and
../local/README.md. The test domain was used only inside local output.
This verifies technical output. Search rankings, indexing, field Core Web Vitals, Google’s chosen canonical, and rich-result appearance cannot be certified from a private local server. After the actual domain is selected and a public deployment is authorized, those require live HTTP checks, Search Console and field data.
Implementation follows Google’s primary guidance on localized versions, canonical URLs, noindex, sitemaps and structured data.