SEO оптимизация
This commit is contained in:
45
index.html
45
index.html
@@ -3,8 +3,51 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<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="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>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="root"></div>
|
<div id="root"></div>
|
||||||
|
|||||||
18
public/robots.txt
Normal file
18
public/robots.txt
Normal 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
15
public/sitemap.xml
Normal 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>
|
||||||
@@ -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 '@mantine/core/styles.css';
|
||||||
|
|
||||||
import { MantineProvider } from '@mantine/core';
|
import { MantineProvider } from '@mantine/core';
|
||||||
import { HeroTitle } from './components/HeroTitle/HeroTitle';
|
import { HeroTitle } from './components/HeroTitle/HeroTitle';
|
||||||
import { DownloadCenter } from './components/DownloadCenter/DownloadCenter';
|
import { DownloadCenter } from './components/DownloadCenter/DownloadCenter';
|
||||||
import { FeaturesGrid } from './components/FeaturesGrid/FeaturesGrid';
|
import { FeaturesGrid } from './components/FeaturesGrid/FeaturesGrid';
|
||||||
|
import { SEO } from './components/SEO/SEO';
|
||||||
import './style.css'
|
import './style.css'
|
||||||
import { MessageSteps } from './components/MessageSteps/MessageSteps';
|
import { MessageSteps } from './components/MessageSteps/MessageSteps';
|
||||||
|
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
return <MantineProvider>
|
return <MantineProvider>
|
||||||
|
<SEO />
|
||||||
<HeroTitle></HeroTitle>
|
<HeroTitle></HeroTitle>
|
||||||
<FeaturesGrid></FeaturesGrid>
|
<FeaturesGrid></FeaturesGrid>
|
||||||
<MessageSteps></MessageSteps>
|
<MessageSteps></MessageSteps>
|
||||||
|
|||||||
44
src/components/SEO/SEO.tsx
Normal file
44
src/components/SEO/SEO.tsx
Normal 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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user