Add sitemap and robots.txt, update home page stats to static values, and fix prayer language detection
- Create sitemap.xml with internationalized routes and proper SEO attributes - Create robots.txt with appropriate crawling rules for public/private content - Update home page stats to show static values (1,416 Bible versions, 17M+ verses) - Remove live stats API calls to eliminate loading delays - Add /api/stats endpoint for potential future use - Fix Romanian prayers incorrectly tagged as English in database - Add missing AZURE_OPENAI_DEPLOYMENT to .env.example - Update translation keys for Bible versions stat - Add sample English prayer requests to populate prayer wall 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -11,6 +11,7 @@ JWT_SECRET=your-jwt-secret
|
|||||||
AZURE_OPENAI_KEY=your-azure-key
|
AZURE_OPENAI_KEY=your-azure-key
|
||||||
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
|
AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com
|
||||||
AZURE_OPENAI_DEPLOYMENT=gpt-4
|
AZURE_OPENAI_DEPLOYMENT=gpt-4
|
||||||
|
AZURE_OPENAI_API_VERSION=2024-02-15-preview
|
||||||
|
|
||||||
# Ollama (optional)
|
# Ollama (optional)
|
||||||
OLLAMA_API_URL=http://your-ollama-server:11434
|
OLLAMA_API_URL=http://your-ollama-server:11434
|
||||||
@@ -49,6 +49,15 @@ export default function Home() {
|
|||||||
verse: string
|
verse: string
|
||||||
reference: string
|
reference: string
|
||||||
} | null>(null)
|
} | null>(null)
|
||||||
|
const [stats] = useState<{
|
||||||
|
bibleVersions: number
|
||||||
|
verses: number
|
||||||
|
books: number
|
||||||
|
}>({
|
||||||
|
bibleVersions: 1416,
|
||||||
|
verses: 17000000,
|
||||||
|
books: 66
|
||||||
|
})
|
||||||
|
|
||||||
// Fetch daily verse
|
// Fetch daily verse
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -72,6 +81,7 @@ export default function Home() {
|
|||||||
fetchDailyVerse()
|
fetchDailyVerse()
|
||||||
}, [locale, t])
|
}, [locale, t])
|
||||||
|
|
||||||
|
|
||||||
// Simulate live user counter
|
// Simulate live user counter
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const interval = setInterval(() => {
|
const interval = setInterval(() => {
|
||||||
@@ -564,13 +574,13 @@ export default function Home() {
|
|||||||
<Box sx={{ display: 'flex', gap: 4, flexWrap: 'wrap', textAlign: 'center', justifyContent: 'center' }}>
|
<Box sx={{ display: 'flex', gap: 4, flexWrap: 'wrap', textAlign: 'center', justifyContent: 'center' }}>
|
||||||
<Box sx={{ flex: { xs: '1 1 100%', sm: '1 1 calc(33.33% - 24px)' } }}>
|
<Box sx={{ flex: { xs: '1 1 100%', sm: '1 1 calc(33.33% - 24px)' } }}>
|
||||||
<Typography variant="h3" color="primary.main" gutterBottom>
|
<Typography variant="h3" color="primary.main" gutterBottom>
|
||||||
66
|
{stats.bibleVersions.toLocaleString()}
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="h6">{t('stats.books')}</Typography>
|
<Typography variant="h6">{t('stats.bibleVersions')}</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
<Box sx={{ flex: { xs: '1 1 100%', sm: '1 1 calc(33.33% - 24px)' } }}>
|
<Box sx={{ flex: { xs: '1 1 100%', sm: '1 1 calc(33.33% - 24px)' } }}>
|
||||||
<Typography variant="h3" color="secondary.main" gutterBottom>
|
<Typography variant="h3" color="secondary.main" gutterBottom>
|
||||||
31,000+
|
17M+
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="h6">{t('stats.verses')}</Typography>
|
<Typography variant="h6">{t('stats.verses')}</Typography>
|
||||||
</Box>
|
</Box>
|
||||||
|
|||||||
@@ -6,7 +6,9 @@ const createPrayerSchema = z.object({
|
|||||||
title: z.string().min(1).max(200),
|
title: z.string().min(1).max(200),
|
||||||
description: z.string().min(1).max(1000),
|
description: z.string().min(1).max(1000),
|
||||||
category: z.enum(['personal', 'family', 'health', 'work', 'ministry', 'world']),
|
category: z.enum(['personal', 'family', 'health', 'work', 'ministry', 'world']),
|
||||||
isAnonymous: z.boolean().optional().default(false)
|
isAnonymous: z.boolean().optional().default(false),
|
||||||
|
isPublic: z.boolean().optional().default(false),
|
||||||
|
language: z.string().min(2).max(5).optional()
|
||||||
})
|
})
|
||||||
|
|
||||||
export async function GET(request: Request) {
|
export async function GET(request: Request) {
|
||||||
@@ -14,7 +16,35 @@ export async function GET(request: Request) {
|
|||||||
const { searchParams } = new URL(request.url)
|
const { searchParams } = new URL(request.url)
|
||||||
const category = searchParams.get('category')
|
const category = searchParams.get('category')
|
||||||
const limit = parseInt(searchParams.get('limit') || '20')
|
const limit = parseInt(searchParams.get('limit') || '20')
|
||||||
const userId = searchParams.get('userId')
|
const visibility = (searchParams.get('visibility') || 'public').toLowerCase()
|
||||||
|
const languagesParam = searchParams.getAll('languages')
|
||||||
|
|
||||||
|
const languages = languagesParam
|
||||||
|
.flatMap(value =>
|
||||||
|
value
|
||||||
|
.split(',')
|
||||||
|
.map(part => part.trim().toLowerCase())
|
||||||
|
.filter(Boolean)
|
||||||
|
)
|
||||||
|
.filter((value, index, self) => self.indexOf(value) === index)
|
||||||
|
|
||||||
|
const authHeader = request.headers.get('authorization')
|
||||||
|
let sessionUserId: string | null = null
|
||||||
|
|
||||||
|
if (authHeader && authHeader.startsWith('Bearer ')) {
|
||||||
|
const token = authHeader.slice(7)
|
||||||
|
const session = await prisma.session.findUnique({
|
||||||
|
where: { token },
|
||||||
|
select: {
|
||||||
|
userId: true,
|
||||||
|
expiresAt: true
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
if (session && session.expiresAt > new Date()) {
|
||||||
|
sessionUserId = session.userId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Build the where clause
|
// Build the where clause
|
||||||
const where: any = {
|
const where: any = {
|
||||||
@@ -25,6 +55,30 @@ export async function GET(request: Request) {
|
|||||||
where.category = category
|
where.category = category
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (visibility === 'private') {
|
||||||
|
if (!sessionUserId) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
error: 'Authentication required to view private prayers',
|
||||||
|
prayers: []
|
||||||
|
},
|
||||||
|
{ status: 401 }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
where.userId = sessionUserId
|
||||||
|
where.isPublic = false
|
||||||
|
} else {
|
||||||
|
where.isPublic = true
|
||||||
|
|
||||||
|
if (languages.length > 0) {
|
||||||
|
where.language = {
|
||||||
|
in: languages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Fetch prayers from database with user prayer status
|
// Fetch prayers from database with user prayer status
|
||||||
const prayers = await prisma.prayerRequest.findMany({
|
const prayers = await prisma.prayerRequest.findMany({
|
||||||
where,
|
where,
|
||||||
@@ -38,9 +92,9 @@ export async function GET(request: Request) {
|
|||||||
name: true
|
name: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
userPrayers: userId ? {
|
userPrayers: sessionUserId ? {
|
||||||
where: {
|
where: {
|
||||||
userId: userId
|
userId: sessionUserId
|
||||||
}
|
}
|
||||||
} : false
|
} : false
|
||||||
}
|
}
|
||||||
@@ -55,7 +109,10 @@ export async function GET(request: Request) {
|
|||||||
author: prayer.isAnonymous ? 'Anonim' : prayer.author,
|
author: prayer.isAnonymous ? 'Anonim' : prayer.author,
|
||||||
timestamp: prayer.createdAt,
|
timestamp: prayer.createdAt,
|
||||||
prayerCount: prayer.prayerCount,
|
prayerCount: prayer.prayerCount,
|
||||||
isPrayedFor: userId && prayer.userPrayers ? prayer.userPrayers.length > 0 : false
|
isPrayedFor: sessionUserId && prayer.userPrayers ? prayer.userPrayers.length > 0 : false,
|
||||||
|
isPublic: prayer.isPublic,
|
||||||
|
language: prayer.language,
|
||||||
|
isOwner: sessionUserId ? prayer.userId === sessionUserId : false
|
||||||
}))
|
}))
|
||||||
|
|
||||||
return NextResponse.json({
|
return NextResponse.json({
|
||||||
@@ -100,6 +157,26 @@ export async function POST(request: Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!userId && !validatedData.isAnonymous) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
error: 'Authentication required'
|
||||||
|
},
|
||||||
|
{ status: 401 }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!validatedData.isPublic && !userId) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
success: false,
|
||||||
|
error: 'Authentication required for private prayers'
|
||||||
|
},
|
||||||
|
{ status: 401 }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// Create new prayer in database
|
// Create new prayer in database
|
||||||
const newPrayer = await prisma.prayerRequest.create({
|
const newPrayer = await prisma.prayerRequest.create({
|
||||||
data: {
|
data: {
|
||||||
@@ -108,6 +185,8 @@ export async function POST(request: Request) {
|
|||||||
category: validatedData.category,
|
category: validatedData.category,
|
||||||
author: validatedData.isAnonymous ? 'Anonim' : userName,
|
author: validatedData.isAnonymous ? 'Anonim' : userName,
|
||||||
isAnonymous: validatedData.isAnonymous,
|
isAnonymous: validatedData.isAnonymous,
|
||||||
|
isPublic: validatedData.isPublic ?? false,
|
||||||
|
language: validatedData.language?.toLowerCase() || 'en',
|
||||||
userId: validatedData.isAnonymous ? null : userId,
|
userId: validatedData.isAnonymous ? null : userId,
|
||||||
prayerCount: 0,
|
prayerCount: 0,
|
||||||
isActive: true
|
isActive: true
|
||||||
@@ -124,7 +203,10 @@ export async function POST(request: Request) {
|
|||||||
author: newPrayer.author,
|
author: newPrayer.author,
|
||||||
timestamp: newPrayer.createdAt,
|
timestamp: newPrayer.createdAt,
|
||||||
prayerCount: newPrayer.prayerCount,
|
prayerCount: newPrayer.prayerCount,
|
||||||
isPrayedFor: false
|
isPrayedFor: false,
|
||||||
|
isPublic: newPrayer.isPublic,
|
||||||
|
language: newPrayer.language,
|
||||||
|
isOwner: !!userId && newPrayer.userId === userId
|
||||||
},
|
},
|
||||||
message: 'Prayer request submitted successfully'
|
message: 'Prayer request submitted successfully'
|
||||||
}, { status: 201 })
|
}, { status: 201 })
|
||||||
|
|||||||
39
app/api/stats/route.ts
Normal file
39
app/api/stats/route.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import { NextResponse } from 'next/server';
|
||||||
|
import { prisma } from '@/lib/db';
|
||||||
|
|
||||||
|
export const runtime = 'nodejs';
|
||||||
|
|
||||||
|
export async function GET() {
|
||||||
|
try {
|
||||||
|
// Get bible statistics
|
||||||
|
const [
|
||||||
|
totalBibleVersions,
|
||||||
|
totalVerses,
|
||||||
|
totalBooks
|
||||||
|
] = await Promise.all([
|
||||||
|
// Count total Bible versions
|
||||||
|
prisma.bibleVersion.count(),
|
||||||
|
|
||||||
|
// Count total verses across all versions
|
||||||
|
prisma.bibleVerse.count(),
|
||||||
|
|
||||||
|
// Count unique books (66 biblical books)
|
||||||
|
prisma.bibleBook.groupBy({
|
||||||
|
by: ['bookKey'],
|
||||||
|
}).then(result => result.length)
|
||||||
|
]);
|
||||||
|
|
||||||
|
return NextResponse.json({
|
||||||
|
bibleVersions: totalBibleVersions,
|
||||||
|
verses: totalVerses,
|
||||||
|
books: totalBooks
|
||||||
|
});
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Stats API error:', error);
|
||||||
|
return NextResponse.json(
|
||||||
|
{ error: 'Failed to fetch statistics' },
|
||||||
|
{ status: 500 }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"stats": {
|
"stats": {
|
||||||
"books": "Biblical books",
|
"bibleVersions": "Bible versions",
|
||||||
"verses": "Verses",
|
"verses": "Verses",
|
||||||
"aiAvailable": "AI Chat available"
|
"aiAvailable": "AI Chat available"
|
||||||
},
|
},
|
||||||
@@ -257,6 +257,7 @@
|
|||||||
"chapters": "chapters",
|
"chapters": "chapters",
|
||||||
"addBookmark": "Add bookmark",
|
"addBookmark": "Add bookmark",
|
||||||
"removeBookmark": "Remove bookmark",
|
"removeBookmark": "Remove bookmark",
|
||||||
|
"loginToBookmark": "Login to bookmark",
|
||||||
"bookmarkVerse": "Bookmark verse",
|
"bookmarkVerse": "Bookmark verse",
|
||||||
"removeVerseBookmark": "Remove verse bookmark",
|
"removeVerseBookmark": "Remove verse bookmark",
|
||||||
"toggleFullscreen": "Toggle fullscreen",
|
"toggleFullscreen": "Toggle fullscreen",
|
||||||
@@ -268,6 +269,30 @@
|
|||||||
"prayers": {
|
"prayers": {
|
||||||
"title": "Prayers",
|
"title": "Prayers",
|
||||||
"subtitle": "Share prayers and pray together with the community",
|
"subtitle": "Share prayers and pray together with the community",
|
||||||
|
"viewModes": {
|
||||||
|
"private": "My private prayers",
|
||||||
|
"public": "Public prayer wall"
|
||||||
|
},
|
||||||
|
"chips": {
|
||||||
|
"private": "Private",
|
||||||
|
"public": "Public"
|
||||||
|
},
|
||||||
|
"languageFilter": {
|
||||||
|
"title": "Languages",
|
||||||
|
"helper": "Choose which languages to include. Your current language stays selected.",
|
||||||
|
"options": {
|
||||||
|
"en": "English",
|
||||||
|
"ro": "Romanian"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"privateInfo": "Private prayers are visible only to you. Turn on public sharing to post them on the prayer wall.",
|
||||||
|
"publicInfo": "Browsing public prayers for your selected language. Add more languages from the filter."
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"private": "You have no private prayers yet. Create one to start your prayer journal.",
|
||||||
|
"public": "No public prayers match the selected filters yet."
|
||||||
|
},
|
||||||
"addRequest": "Add prayer request",
|
"addRequest": "Add prayer request",
|
||||||
"anonymous": "Anonymous",
|
"anonymous": "Anonymous",
|
||||||
"prayFor": "Pray for this",
|
"prayFor": "Pray for this",
|
||||||
@@ -299,7 +324,10 @@
|
|||||||
"descriptionLabel": "Description",
|
"descriptionLabel": "Description",
|
||||||
"placeholder": "Describe your prayer request...",
|
"placeholder": "Describe your prayer request...",
|
||||||
"cancel": "Cancel",
|
"cancel": "Cancel",
|
||||||
"submit": "Add prayer"
|
"submit": "Add prayer",
|
||||||
|
"makePublic": "Share on the public prayer wall",
|
||||||
|
"visibilityPrivate": "Private prayers stay visible only to you.",
|
||||||
|
"visibilityPublic": "Public prayers are visible to everyone on the prayer wall."
|
||||||
},
|
},
|
||||||
"samples": {
|
"samples": {
|
||||||
"item1": {
|
"item1": {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"stats": {
|
"stats": {
|
||||||
"books": "Cărți biblice",
|
"bibleVersions": "Versiuni Biblia",
|
||||||
"verses": "Versete",
|
"verses": "Versete",
|
||||||
"aiAvailable": "Chat AI disponibil"
|
"aiAvailable": "Chat AI disponibil"
|
||||||
},
|
},
|
||||||
@@ -257,6 +257,7 @@
|
|||||||
"chapters": "capitole",
|
"chapters": "capitole",
|
||||||
"addBookmark": "Adaugă la favorite",
|
"addBookmark": "Adaugă la favorite",
|
||||||
"removeBookmark": "Elimină din favorite",
|
"removeBookmark": "Elimină din favorite",
|
||||||
|
"loginToBookmark": "Loghează-te pentru marcaj",
|
||||||
"bookmarkVerse": "Adaugă verset la favorite",
|
"bookmarkVerse": "Adaugă verset la favorite",
|
||||||
"removeVerseBookmark": "Elimină verset din favorite",
|
"removeVerseBookmark": "Elimină verset din favorite",
|
||||||
"toggleFullscreen": "Comută ecran complet",
|
"toggleFullscreen": "Comută ecran complet",
|
||||||
@@ -268,6 +269,30 @@
|
|||||||
"prayers": {
|
"prayers": {
|
||||||
"title": "Rugăciuni",
|
"title": "Rugăciuni",
|
||||||
"subtitle": "Partajează rugăciuni și roagă-te împreună cu comunitatea",
|
"subtitle": "Partajează rugăciuni și roagă-te împreună cu comunitatea",
|
||||||
|
"viewModes": {
|
||||||
|
"private": "Rugăciunile mele",
|
||||||
|
"public": "Peretele de rugăciuni public"
|
||||||
|
},
|
||||||
|
"chips": {
|
||||||
|
"private": "Privată",
|
||||||
|
"public": "Publică"
|
||||||
|
},
|
||||||
|
"languageFilter": {
|
||||||
|
"title": "Limbi",
|
||||||
|
"helper": "Alege limbile pentru care vrei să vezi rugăciuni. Limba curentă rămâne selectată.",
|
||||||
|
"options": {
|
||||||
|
"en": "Engleză",
|
||||||
|
"ro": "Română"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"alerts": {
|
||||||
|
"privateInfo": "Rugăciunile private sunt vizibile doar pentru tine. Activează opțiunea publică pentru a le împărtăși comunității.",
|
||||||
|
"publicInfo": "Vizualizezi rugăciuni publice pentru limba selectată. Adaugă alte limbi din filtru."
|
||||||
|
},
|
||||||
|
"empty": {
|
||||||
|
"private": "Nu ai încă rugăciuni private. Creează una pentru a începe jurnalul tău de rugăciuni.",
|
||||||
|
"public": "Nu există încă rugăciuni publice pentru filtrele selectate."
|
||||||
|
},
|
||||||
"addRequest": "Adaugă cerere de rugăciune",
|
"addRequest": "Adaugă cerere de rugăciune",
|
||||||
"anonymous": "Anonim",
|
"anonymous": "Anonim",
|
||||||
"prayFor": "Mă rog pentru aceasta",
|
"prayFor": "Mă rog pentru aceasta",
|
||||||
@@ -299,7 +324,10 @@
|
|||||||
"descriptionLabel": "Descriere",
|
"descriptionLabel": "Descriere",
|
||||||
"placeholder": "Descrie cererea ta de rugăciune...",
|
"placeholder": "Descrie cererea ta de rugăciune...",
|
||||||
"cancel": "Anulează",
|
"cancel": "Anulează",
|
||||||
"submit": "Adaugă rugăciunea"
|
"submit": "Adaugă rugăciunea",
|
||||||
|
"makePublic": "Publică pe peretele de rugăciuni",
|
||||||
|
"visibilityPrivate": "Rugăciunile private sunt vizibile doar pentru tine.",
|
||||||
|
"visibilityPublic": "Rugăciunile publice sunt vizibile tuturor pe peretele de rugăciuni."
|
||||||
},
|
},
|
||||||
"samples": {
|
"samples": {
|
||||||
"item1": {
|
"item1": {
|
||||||
|
|||||||
39
public/robots.txt
Normal file
39
public/robots.txt
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
|
|
||||||
|
# Allow access to public pages
|
||||||
|
Allow: /en/
|
||||||
|
Allow: /ro/
|
||||||
|
Allow: /en/bible
|
||||||
|
Allow: /ro/bible
|
||||||
|
Allow: /en/prayers
|
||||||
|
Allow: /ro/prayers
|
||||||
|
Allow: /en/search
|
||||||
|
Allow: /ro/search
|
||||||
|
Allow: /en/contact
|
||||||
|
Allow: /ro/contact
|
||||||
|
|
||||||
|
# Disallow admin pages
|
||||||
|
Disallow: /admin/
|
||||||
|
|
||||||
|
# Disallow private user pages
|
||||||
|
Disallow: /*/dashboard
|
||||||
|
Disallow: /*/profile
|
||||||
|
Disallow: /*/settings
|
||||||
|
Disallow: /*/bookmarks
|
||||||
|
|
||||||
|
# Disallow API endpoints
|
||||||
|
Disallow: /api/
|
||||||
|
|
||||||
|
# Disallow authentication pages from indexing
|
||||||
|
Disallow: /*/login
|
||||||
|
Disallow: /*/auth/
|
||||||
|
|
||||||
|
# Allow static assets
|
||||||
|
Allow: /_next/static/
|
||||||
|
Allow: /favicon.ico
|
||||||
|
Allow: /images/
|
||||||
|
Allow: /icons/
|
||||||
|
|
||||||
|
# Sitemap location
|
||||||
|
Sitemap: https://biblicalguide.com/sitemap.xml
|
||||||
116
public/sitemap.xml
Normal file
116
public/sitemap.xml
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
<?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">
|
||||||
|
<!-- English routes -->
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/en</loc>
|
||||||
|
<changefreq>daily</changefreq>
|
||||||
|
<priority>1.0</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/en/bible</loc>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>0.9</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/bible" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/bible" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/en/prayers</loc>
|
||||||
|
<changefreq>daily</changefreq>
|
||||||
|
<priority>0.8</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/prayers" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/prayers" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/en/search</loc>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>0.7</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/search" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/search" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/en/contact</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.6</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/contact" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/contact" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/en/login</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/login" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/login" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/en/auth/login</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/auth/login" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/auth/login" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<!-- Romanian routes -->
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/ro</loc>
|
||||||
|
<changefreq>daily</changefreq>
|
||||||
|
<priority>1.0</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/ro/bible</loc>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>0.9</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/bible" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/bible" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/ro/prayers</loc>
|
||||||
|
<changefreq>daily</changefreq>
|
||||||
|
<priority>0.8</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/prayers" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/prayers" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/ro/search</loc>
|
||||||
|
<changefreq>weekly</changefreq>
|
||||||
|
<priority>0.7</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/search" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/search" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/ro/contact</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.6</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/contact" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/contact" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/ro/login</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/login" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/login" />
|
||||||
|
</url>
|
||||||
|
|
||||||
|
<url>
|
||||||
|
<loc>https://biblicalguide.com/ro/auth/login</loc>
|
||||||
|
<changefreq>monthly</changefreq>
|
||||||
|
<priority>0.5</priority>
|
||||||
|
<xhtml:link rel="alternate" hreflang="ro" href="https://biblicalguide.com/ro/auth/login" />
|
||||||
|
<xhtml:link rel="alternate" hreflang="en" href="https://biblicalguide.com/en/auth/login" />
|
||||||
|
</url>
|
||||||
|
</urlset>
|
||||||
Reference in New Issue
Block a user