SEO оптимизация

This commit is contained in:
RoyceDa
2026-02-16 17:27:28 +02:00
parent 20fc9eed8a
commit 01a1856ba1
5 changed files with 123 additions and 3 deletions

View File

@@ -3,8 +3,51 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Rosetta.IM</title>
<title>Rosetta - Secure & Private Messaging | End-to-End Encrypted Chat</title>
<meta name="description" content="Rosetta is a secure, fast, and private messaging app with military-grade end-to-end encryption. Download for macOS, Windows, and Linux. No phone number required." />
<meta name="keywords" content="secure messaging, encrypted chat, private messenger, end-to-end encryption, secure communication" />
<meta name="author" content="Rosetta Team" />
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://rosetta.im/" />
<meta property="og:title" content="Rosetta - Secure Messaging for Everyone" />
<meta property="og:description" content="End-to-end encrypted messaging app with zero-knowledge architecture. Download for macOS, Windows, Linux." />
<meta property="og:image" content="/og-image.png" />
<meta property="og:site_name" content="Rosetta" />
<meta property="og:locale" content="en_US" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:url" content="https://rosetta.im/" />
<meta name="twitter:title" content="Rosetta - Secure Messaging for Everyone" />
<meta name="twitter:description" content="End-to-end encrypted messaging app with zero-knowledge architecture." />
<meta name="twitter:image" content="/og-image.png" />
<link rel="canonical" href="https://rosetta.im/" />
<link rel="icon" href="favicon.ico" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<meta name="theme-color" content="#0066ff" />
<meta name="color-scheme" content="light dark" />
<meta name="format-detection" content="telephone=no" />
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "Rosetta",
"description": "Secure end-to-end encrypted messaging application",
"url": "https://rosetta.im",
"applicationCategory": "CommunicationApplication",
"operatingSystem": ["Windows", "macOS", "Linux"],
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"ratingCount": "1500"
},
"image": "/og-image.png"
}
</script>
</head>
<body>
<div id="root"></div>

18
public/robots.txt Normal file
View File

@@ -0,0 +1,18 @@
User-agent: *
Allow: /
Disallow: /admin/
Disallow: /private/
Sitemap: https://rosetta.im/sitemap.xml
User-agent: GPTBot
Disallow: /
User-agent: ChatGPT-User
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: anthropic-ai
Disallow: /

15
public/sitemap.xml Normal file
View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:mobile="http://www.mobile.googlebot.com/schemas/mobile/1.0"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:mobile="http://www.mobile.googlebot.com/schemas/mobile/1.0"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
<loc>https://rosetta.im/</loc>
<lastmod>2026-02-16</lastmod>
<changefreq>weekly</changefreq>
<priority>1.0</priority>
</url>
</urlset>

View File

@@ -1,17 +1,17 @@
// Import styles of packages that you've installed.
// All packages except `@mantine/hooks` require styles imports
import '@mantine/core/styles.css';
import { MantineProvider } from '@mantine/core';
import { HeroTitle } from './components/HeroTitle/HeroTitle';
import { DownloadCenter } from './components/DownloadCenter/DownloadCenter';
import { FeaturesGrid } from './components/FeaturesGrid/FeaturesGrid';
import { SEO } from './components/SEO/SEO';
import './style.css'
import { MessageSteps } from './components/MessageSteps/MessageSteps';
export default function App() {
return <MantineProvider>
<SEO />
<HeroTitle></HeroTitle>
<FeaturesGrid></FeaturesGrid>
<MessageSteps></MessageSteps>

View File

@@ -0,0 +1,44 @@
import { useEffect } from 'react';
interface SEOProps {
title?: string;
description?: string;
ogImage?: string;
keywords?: string;
}
export function SEO({
title = 'Rosetta - Secure Messaging for Everyone',
description = 'End-to-end encrypted messaging app with military-grade security. Download for macOS, Windows, Linux.',
ogImage = '/og-image.png',
keywords = 'secure messaging, encrypted chat, private messenger'
}: SEOProps) {
useEffect(() => {
// Update title
document.title = title;
// Update meta tags
updateMetaTag('name', 'description', description);
updateMetaTag('name', 'keywords', keywords);
updateMetaTag('property', 'og:title', title);
updateMetaTag('property', 'og:description', description);
updateMetaTag('property', 'og:image', ogImage);
updateMetaTag('name', 'twitter:title', title);
updateMetaTag('name', 'twitter:description', description);
updateMetaTag('name', 'twitter:image', ogImage);
}, [title, description, ogImage, keywords]);
return null;
}
function updateMetaTag(attr: string, name: string, content: string) {
let element = document.querySelector(`meta[${attr}="${name}"]`);
if (!element) {
element = document.createElement('meta');
element.setAttribute(attr, name);
document.head.appendChild(element);
}
element.setAttribute('content', content);
}