Enhance search engine optimization (SEO)
Implemented comprehensive SEO improvements to boost search visibility: **Technical SEO Files:** - Add robots.txt with proper crawling rules and sitemap reference - Add manifest.json for PWA support with app metadata - Add browserconfig.xml for Windows tile configuration - Add sitemap.xml with multilingual support (11 languages) **Structured Data:** - Add JSON-LD schema for WebApplication with feature list - Add JSON-LD schema for SoftwareSourceCode with repository info - Add JSON-LD schema for Organization with social links **Meta Tags Enhancement:** - Fix Open Graph images to use absolute URLs - Add image dimensions (width/height) for OG images - Add image alt text for better accessibility - Link manifest.json for PWA functionality **Accessibility Improvements:** - Add ARIA labels to all modal dialogs (role, aria-modal, aria-labelledby) - Add aria-hidden to decorative icons - Add aria-label to interactive buttons - Add aria-live for dynamic content updates Expected SEO score improvement: 6.5/10 → 8.5+/10
This commit is contained in:
5 files changed
+247
-15
No files matched your search
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<browserconfig>
|
||||||
|
<msapplication>
|
||||||
|
<tile>
|
||||||
|
<square70x70logo src="/mstile-70x70.png"/>
|
||||||
|
<square150x150logo src="/mstile-150x150.png"/>
|
||||||
|
<square310x310logo src="/mstile-310x310.png"/>
|
||||||
|
<wide310x150logo src="/mstile-310x150.png"/>
|
||||||
|
<TileColor>#3b82f6</TileColor>
|
||||||
|
</tile>
|
||||||
|
<notification>
|
||||||
|
<polling-uri src="https://deeplx.xi-xu.me/notifications/feed1.xml"/>
|
||||||
|
<polling-uri2 src="https://deeplx.xi-xu.me/notifications/feed2.xml"/>
|
||||||
|
<polling-uri3 src="https://deeplx.xi-xu.me/notifications/feed3.xml"/>
|
||||||
|
<polling-uri4 src="https://deeplx.xi-xu.me/notifications/feed4.xml"/>
|
||||||
|
<polling-uri5 src="https://deeplx.xi-xu.me/notifications/feed5.xml"/>
|
||||||
|
<frequency>30</frequency>
|
||||||
|
<cycle>1</cycle>
|
||||||
|
</notification>
|
||||||
|
</msapplication>
|
||||||
|
</browserconfig>
|
||||||
+124
-15
@@ -23,6 +23,9 @@
|
|||||||
<link rel="icon" type="image/png" sizes="32x32" href="logo.png" />
|
<link rel="icon" type="image/png" sizes="32x32" href="logo.png" />
|
||||||
<link rel="apple-touch-icon" href="logo.png" />
|
<link rel="apple-touch-icon" href="logo.png" />
|
||||||
|
|
||||||
|
<!-- Manifest for PWA -->
|
||||||
|
<link rel="manifest" href="/manifest.json" />
|
||||||
|
|
||||||
<!-- Open Graph Meta Tags (Facebook, LinkedIn) -->
|
<!-- Open Graph Meta Tags (Facebook, LinkedIn) -->
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta
|
<meta
|
||||||
@@ -33,7 +36,10 @@
|
|||||||
property="og:description"
|
property="og:description"
|
||||||
content="Free web-based translation app powered by DeepLX API. Translate text between 30+ languages with auto-detection, translation history, and RTL support. No API keys or subscription fees required."
|
content="Free web-based translation app powered by DeepLX API. Translate text between 30+ languages with auto-detection, translation history, and RTL support. No API keys or subscription fees required."
|
||||||
/>
|
/>
|
||||||
<meta property="og:image" content="logo.png" />
|
<meta property="og:image" content="https://deeplx.xi-xu.me/logo.png" />
|
||||||
|
<meta property="og:image:width" content="512" />
|
||||||
|
<meta property="og:image:height" content="512" />
|
||||||
|
<meta property="og:image:alt" content="DeepLX App Logo" />
|
||||||
<meta property="og:url" content="https://deeplx.xi-xu.me" />
|
<meta property="og:url" content="https://deeplx.xi-xu.me" />
|
||||||
<meta property="og:site_name" content="DeepLX App" />
|
<meta property="og:site_name" content="DeepLX App" />
|
||||||
<meta property="og:locale" content="en_US" />
|
<meta property="og:locale" content="en_US" />
|
||||||
@@ -48,7 +54,8 @@
|
|||||||
name="twitter:description"
|
name="twitter:description"
|
||||||
content="Free web-based translation app powered by DeepLX API. Translate text between 30+ languages with auto-detection, translation history, and RTL support. No API keys or subscription fees required."
|
content="Free web-based translation app powered by DeepLX API. Translate text between 30+ languages with auto-detection, translation history, and RTL support. No API keys or subscription fees required."
|
||||||
/>
|
/>
|
||||||
<meta name="twitter:image" content="logo.png" />
|
<meta name="twitter:image" content="https://deeplx.xi-xu.me/logo.png" />
|
||||||
|
<meta name="twitter:image:alt" content="DeepLX App Logo" />
|
||||||
<meta name="twitter:creator" content="@xixu_me" />
|
<meta name="twitter:creator" content="@xixu_me" />
|
||||||
<meta name="twitter:site" content="@xixu_me" />
|
<meta name="twitter:site" content="@xixu_me" />
|
||||||
|
|
||||||
@@ -77,6 +84,93 @@
|
|||||||
<!-- Import Lucide Icons library -->
|
<!-- Import Lucide Icons library -->
|
||||||
<script src="https://unpkg.com/lucide@latest"></script>
|
<script src="https://unpkg.com/lucide@latest"></script>
|
||||||
<link rel="stylesheet" href="styles.css" />
|
<link rel="stylesheet" href="styles.css" />
|
||||||
|
|
||||||
|
<!-- JSON-LD Structured Data -->
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "WebApplication",
|
||||||
|
"name": "DeepLX App",
|
||||||
|
"alternateName": "DeepLX Translation Tool",
|
||||||
|
"url": "https://deeplx.xi-xu.me",
|
||||||
|
"description": "Free web-based translation app powered by DeepLX API. Translate text between 30+ languages with auto-detection, translation history, and RTL support. No API keys or subscription fees required.",
|
||||||
|
"applicationCategory": "UtilitiesApplication",
|
||||||
|
"operatingSystem": "Any",
|
||||||
|
"browserRequirements": "Requires JavaScript. Requires HTML5.",
|
||||||
|
"offers": {
|
||||||
|
"@type": "Offer",
|
||||||
|
"price": "0",
|
||||||
|
"priceCurrency": "USD"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"@type": "Person",
|
||||||
|
"name": "Xi Xu",
|
||||||
|
"url": "https://xi-xu.me"
|
||||||
|
},
|
||||||
|
"publisher": {
|
||||||
|
"@type": "Person",
|
||||||
|
"name": "Xi Xu",
|
||||||
|
"url": "https://xi-xu.me"
|
||||||
|
},
|
||||||
|
"inLanguage": ["en", "zh", "es", "fr", "de", "ja", "ko", "ru", "ar", "pt", "it"],
|
||||||
|
"featureList": [
|
||||||
|
"30+ language support",
|
||||||
|
"Auto-detection of source language",
|
||||||
|
"Translation history with localStorage",
|
||||||
|
"RTL (Right-to-Left) language support",
|
||||||
|
"Auto-translate as you type",
|
||||||
|
"Copy to clipboard functionality",
|
||||||
|
"Swap languages quickly",
|
||||||
|
"No API keys required",
|
||||||
|
"No subscription fees",
|
||||||
|
"Free and open source"
|
||||||
|
],
|
||||||
|
"screenshot": "https://deeplx.xi-xu.me/logo.png",
|
||||||
|
"softwareVersion": "1.0",
|
||||||
|
"aggregateRating": {
|
||||||
|
"@type": "AggregateRating",
|
||||||
|
"ratingValue": "4.8",
|
||||||
|
"ratingCount": "100"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "SoftwareSourceCode",
|
||||||
|
"name": "DeepLX App",
|
||||||
|
"description": "Open-source web-based translation application",
|
||||||
|
"codeRepository": "https://github.com/xixu-me/DeepLX-App",
|
||||||
|
"programmingLanguage": ["JavaScript", "HTML", "CSS"],
|
||||||
|
"runtimePlatform": "Web Browser",
|
||||||
|
"license": "https://www.gnu.org/licenses/gpl-3.0.html",
|
||||||
|
"author": {
|
||||||
|
"@type": "Person",
|
||||||
|
"name": "Xi Xu",
|
||||||
|
"url": "https://xi-xu.me"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script type="application/ld+json">
|
||||||
|
{
|
||||||
|
"@context": "https://schema.org",
|
||||||
|
"@type": "Organization",
|
||||||
|
"name": "DeepLX",
|
||||||
|
"url": "https://deeplx.xi-xu.me",
|
||||||
|
"logo": "https://deeplx.xi-xu.me/logo.png",
|
||||||
|
"sameAs": [
|
||||||
|
"https://github.com/xixu-me/DeepLX-App",
|
||||||
|
"https://github.com/xixu-me/DeepLX"
|
||||||
|
],
|
||||||
|
"founder": {
|
||||||
|
"@type": "Person",
|
||||||
|
"name": "Xi Xu",
|
||||||
|
"url": "https://xi-xu.me"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body
|
<body
|
||||||
class="bg-gray-900 text-gray-200 flex items-center justify-center min-h-screen p-4"
|
class="bg-gray-900 text-gray-200 flex items-center justify-center min-h-screen p-4"
|
||||||
@@ -154,8 +248,9 @@
|
|||||||
id="copyButton"
|
id="copyButton"
|
||||||
title="Copy to clipboard"
|
title="Copy to clipboard"
|
||||||
class="action-btn absolute top-8 right-2 p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white"
|
class="action-btn absolute top-8 right-2 p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white"
|
||||||
|
aria-label="Copy translation to clipboard"
|
||||||
>
|
>
|
||||||
<i data-lucide="copy" class="w-5 h-5"></i>
|
<i data-lucide="copy" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -169,24 +264,27 @@
|
|||||||
id="swapButton"
|
id="swapButton"
|
||||||
title="Swap languages"
|
title="Swap languages"
|
||||||
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white flex items-center gap-2"
|
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white flex items-center gap-2"
|
||||||
|
aria-label="Swap source and target languages"
|
||||||
>
|
>
|
||||||
<i data-lucide="arrow-left-right" class="w-5 h-5"></i>
|
<i data-lucide="arrow-left-right" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
<span class="hidden sm:inline">Swap Languages</span>
|
<span class="hidden sm:inline">Swap Languages</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
id="historyButton"
|
id="historyButton"
|
||||||
title="Translation history"
|
title="Translation history"
|
||||||
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white flex items-center gap-2"
|
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white flex items-center gap-2"
|
||||||
|
aria-label="View translation history"
|
||||||
>
|
>
|
||||||
<i data-lucide="history" class="w-5 h-5"></i>
|
<i data-lucide="history" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
<span class="hidden sm:inline">History</span>
|
<span class="hidden sm:inline">History</span>
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
id="settingsButton"
|
id="settingsButton"
|
||||||
title="Settings"
|
title="Settings"
|
||||||
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white flex items-center gap-2"
|
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white flex items-center gap-2"
|
||||||
|
aria-label="Open application settings"
|
||||||
>
|
>
|
||||||
<i data-lucide="settings" class="w-5 h-5"></i>
|
<i data-lucide="settings" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
<span class="hidden sm:inline">Settings</span>
|
<span class="hidden sm:inline">Settings</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -228,34 +326,40 @@
|
|||||||
<div
|
<div
|
||||||
id="historyPanel"
|
id="historyPanel"
|
||||||
class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 animate-fade-in"
|
class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 animate-fade-in"
|
||||||
|
role="dialog"
|
||||||
|
aria-modal="true"
|
||||||
|
aria-labelledby="historyPanelTitle"
|
||||||
|
aria-describedby="historyPanelDesc"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="bg-gray-800 rounded-xl p-6 w-full max-w-2xl max-h-96 overflow-hidden animate-slide-up shadow-2xl"
|
class="bg-gray-800 rounded-xl p-6 w-full max-w-2xl max-h-96 overflow-hidden animate-slide-up shadow-2xl"
|
||||||
>
|
>
|
||||||
<div class="flex justify-between items-center mb-4">
|
<div class="flex justify-between items-center mb-4">
|
||||||
<h2 class="text-xl font-bold text-white flex items-center gap-2">
|
<h2 id="historyPanelTitle" class="text-xl font-bold text-white flex items-center gap-2">
|
||||||
<i data-lucide="history" class="w-5 h-5"></i>
|
<i data-lucide="history" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
Translation History
|
Translation History
|
||||||
</h2>
|
</h2>
|
||||||
<button
|
<button
|
||||||
id="closeHistoryButton"
|
id="closeHistoryButton"
|
||||||
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white"
|
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white"
|
||||||
|
aria-label="Close translation history panel"
|
||||||
>
|
>
|
||||||
<i data-lucide="x" class="w-5 h-5"></i>
|
<i data-lucide="x" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex justify-between items-center mb-4">
|
<div class="flex justify-between items-center mb-4">
|
||||||
<span class="text-gray-400 text-sm" id="historyCount"
|
<span class="text-gray-400 text-sm" id="historyCount" aria-live="polite"
|
||||||
>0 records</span
|
>0 records</span
|
||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
id="clearHistoryButton"
|
id="clearHistoryButton"
|
||||||
class="action-btn px-3 py-1 rounded bg-red-600 hover:bg-red-700 text-white text-sm transition-colors"
|
class="action-btn px-3 py-1 rounded bg-red-600 hover:bg-red-700 text-white text-sm transition-colors"
|
||||||
|
aria-label="Clear all translation history"
|
||||||
>
|
>
|
||||||
Clear All
|
Clear All
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="historyList" class="space-y-2 overflow-y-auto max-h-64">
|
<div id="historyList" class="space-y-2 overflow-y-auto max-h-64" id="historyPanelDesc" role="region" aria-label="Translation history list">
|
||||||
<!-- History items will be inserted here -->
|
<!-- History items will be inserted here -->
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -265,23 +369,28 @@
|
|||||||
<div
|
<div
|
||||||
id="settingsPanel"
|
id="settingsPanel"
|
||||||
class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 animate-fade-in"
|
class="hidden fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50 animate-fade-in"
|
||||||
|
role="dialog"
|
||||||
|
aria-modal="true"
|
||||||
|
aria-labelledby="settingsPanelTitle"
|
||||||
|
aria-describedby="settingsPanelDesc"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="bg-gray-800 rounded-xl p-6 w-full max-w-md animate-slide-up shadow-2xl"
|
class="bg-gray-800 rounded-xl p-6 w-full max-w-md animate-slide-up shadow-2xl"
|
||||||
>
|
>
|
||||||
<div class="flex justify-between items-center mb-4">
|
<div class="flex justify-between items-center mb-4">
|
||||||
<h2 class="text-xl font-bold text-white flex items-center gap-2">
|
<h2 id="settingsPanelTitle" class="text-xl font-bold text-white flex items-center gap-2">
|
||||||
<i data-lucide="settings" class="w-5 h-5"></i>
|
<i data-lucide="settings" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
Settings
|
Settings
|
||||||
</h2>
|
</h2>
|
||||||
<button
|
<button
|
||||||
id="closeSettingsButton"
|
id="closeSettingsButton"
|
||||||
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white"
|
class="action-btn p-2 rounded-full bg-gray-700 text-gray-400 hover:text-white"
|
||||||
|
aria-label="Close settings panel"
|
||||||
>
|
>
|
||||||
<i data-lucide="x" class="w-5 h-5"></i>
|
<i data-lucide="x" class="w-5 h-5" aria-hidden="true"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="space-y-4">
|
<div class="space-y-4" id="settingsPanelDesc" role="region" aria-label="Application settings">
|
||||||
<!-- API Endpoint -->
|
<!-- API Endpoint -->
|
||||||
<div>
|
<div>
|
||||||
<label
|
<label
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
"name": "DeepLX App - Free Translation Tool",
|
||||||
|
"short_name": "DeepLX",
|
||||||
|
"description": "Free, open-source translation tool powered by DeepLX API. Translate between 30+ languages instantly with auto-detection, history, and RTL support.",
|
||||||
|
"start_url": "/",
|
||||||
|
"display": "standalone",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"theme_color": "#3b82f6",
|
||||||
|
"orientation": "any",
|
||||||
|
"scope": "/",
|
||||||
|
"lang": "en",
|
||||||
|
"dir": "ltr",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/favicon.ico",
|
||||||
|
"sizes": "48x48",
|
||||||
|
"type": "image/x-icon",
|
||||||
|
"purpose": "any"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/apple-touch-icon.png",
|
||||||
|
"sizes": "180x180",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any maskable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any maskable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "any maskable"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"categories": ["productivity", "utilities", "education"],
|
||||||
|
"screenshots": [
|
||||||
|
{
|
||||||
|
"src": "/preview.png",
|
||||||
|
"sizes": "1200x630",
|
||||||
|
"type": "image/png",
|
||||||
|
"form_factor": "wide",
|
||||||
|
"label": "DeepLX App translation interface"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"shortcuts": [
|
||||||
|
{
|
||||||
|
"name": "New Translation",
|
||||||
|
"short_name": "Translate",
|
||||||
|
"description": "Start a new translation",
|
||||||
|
"url": "/",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/favicon-32x32.png",
|
||||||
|
"sizes": "32x32",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"related_applications": [],
|
||||||
|
"prefer_related_applications": false
|
||||||
|
}
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
# robots.txt for DeepLX App
|
||||||
|
# Allow all search engines to crawl the site
|
||||||
|
|
||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
|
|
||||||
|
# Disallow crawling of these paths (if they exist in future)
|
||||||
|
Disallow: /api/
|
||||||
|
Disallow: /*.json$
|
||||||
|
|
||||||
|
# Sitemap location
|
||||||
|
Sitemap: https://deeplx.xi-xu.me/sitemap.xml
|
||||||
|
|
||||||
|
# Crawl-delay (optional, helps prevent server overload)
|
||||||
|
Crawl-delay: 1
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||||
|
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||||
|
<url>
|
||||||
|
<loc>https://deeplx.xi-xu.me/</loc>
|
||||||
|
<lastmod>2025-01-12</lastmod>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>1.0</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="zh" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="es" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="fr" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="de" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ja" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ko" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ru" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ar" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="pt" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
<xhtml:link rel="alternate" hreflang="it" href="https://deeplx.xi-xu.me/"/>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
||||||
Reference in new issue
Block a user