Add SEO basics: separate EN/RU pages, sitemap, OG banner
Splits the landing page into / and /ru/ so each language can rank on its own, with hreflang links between them; boot.js/main.js now do a real navigation between the two instead of toggling text in place. Adds robots.txt and sitemap.xml, JSON-LD SoftwareApplication markup, Twitter Card tags, and a proper 1200x630 og-image.png in place of the SVG favicon for social previews. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -378,16 +378,19 @@ does, and a privacy policy saying that it collects nothing. Partner Center leave
|
||||
the policy optional for an app that gathers no data, but a page saying so out
|
||||
loud is what takes the question off the reviewer's desk.
|
||||
|
||||
The whole of it is five files in `site`, and nothing is fetched from anywhere
|
||||
else — no framework, no build step, no font from a network:
|
||||
Nothing is fetched from anywhere else — no framework, no build step, no font
|
||||
from a network:
|
||||
|
||||
| File | What is in it |
|
||||
|---|---|
|
||||
| `index.html` | The markup, both languages at once |
|
||||
| `index.html` | The English page — the markup, both languages at once |
|
||||
| `ru/index.html` | The same markup, Russian in front by default |
|
||||
| `styles.css` | Every rule, the palette included |
|
||||
| `boot.js` | The language and the theme of an earlier visit, before the first frame |
|
||||
| `main.js` | The rest: the switches, the menu, the demo, the preview |
|
||||
| `favicon.svg` | The same dark plate with "Aя" as the application icon |
|
||||
| `robots.txt` | Points crawlers at the sitemap, nothing disallowed |
|
||||
| `sitemap.xml` | Both pages, cross-linked by `hreflang` |
|
||||
|
||||
`boot.js` is small and separate for one reason: it has to run before the body is
|
||||
parsed. It reads what was chosen last time and puts it on the `<html>` element,
|
||||
@@ -395,22 +398,25 @@ and without it the first frame would be English in the system theme and correct
|
||||
itself a moment later, in plain sight. `main.js` works on markup that has to
|
||||
exist by then, so it is deferred instead.
|
||||
|
||||
Both languages live in the markup at once, and a switch in the corner picks one.
|
||||
Every translated piece is a `<span lang="en">` beside a `<span lang="ru">`, and
|
||||
whichever does not match the language on the `<html>` element is hidden by a rule
|
||||
of two lines. With the scripts switched off the page still reads, in English.
|
||||
Both languages live in the markup of each page at once, and a switch in the
|
||||
corner picks one. Every translated piece is a `<span lang="en">` beside a
|
||||
`<span lang="ru">`, and whichever does not match the language on the `<html>`
|
||||
element is hidden by a rule of two lines. With the scripts switched off either
|
||||
page still reads, in the language it defaults to.
|
||||
|
||||
Publishing means copying the five files as they are. Before that, two things are
|
||||
still waiting for an address.
|
||||
English and Russian are two pages rather than one page with a client-side
|
||||
switch, so that each can rank in search on its own: `/` and `/ru/`, with
|
||||
`hreflang` links between them in both the markup and `sitemap.xml`, and each
|
||||
carrying its own title, description and canonical address. Clicking EN or RU is
|
||||
a real navigation between the two rather than a rewrite in place, and `boot.js`
|
||||
sends a first-time visitor to the page matching their browser's language —
|
||||
but never away from whichever of the two a link already pointed them at, since
|
||||
that would undo the separate ranking for anyone arriving that way, crawlers
|
||||
included.
|
||||
|
||||
The Store listing is the first: the two download buttons are
|
||||
`<span class="btn disabled" role="link">` rather than links, because a
|
||||
placeholder in `href` would be a relative address and anything following it would
|
||||
land on a 404. The address turns each of them back into
|
||||
`<a class="btn" href="…">` and takes the note beside it away.
|
||||
|
||||
The address of the site itself is the second, wanted by three tags the head does
|
||||
not carry yet: `og:image`, `og:url` and the canonical link.
|
||||
Publishing means copying the files as they are — assets are referenced by an
|
||||
absolute path (`/styles.css` and so on) so `ru/index.html` reaches the same
|
||||
copy rather than needing one of its own.
|
||||
|
||||
Support goes to `support@alrakis.kz`: it stands in the privacy section, under the
|
||||
download buttons and in the footer.
|
||||
|
||||
Reference in New Issue
Block a user