fix(seo): correct canonical domain to www.mnqeventos.es
mnqcatering.com was never actually registered (WHOIS: no match, no DNS records) -- it was an intended rename that never happened. The real, live, registered production domain is www.mnqeventos.es. Every canonical/OG/schema/sitemap/robots reference and the host-redirect middleware pointed at the wrong, non-resolving domain; left as-is, the middleware would have 301'd every real visitor away to a dead host. Also fixes two schema.org validity issues found during audit: - '@type': 'CateringService' is not a real schema.org type -- corrected to 'CateringBusiness' (LocalBusiness/FoodEstablishment subtype) - 'serviceType' is a Service property, not valid on LocalBusiness -- restructured as makesOffer -> Offer -> itemOffered Service entities - telephone normalized to E.164 in the schema block
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@ import node from '@astrojs/node';
|
||||
import sitemap from '@astrojs/sitemap';
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://www.mnqcatering.com',
|
||||
site: 'https://www.mnqeventos.es',
|
||||
output: 'server',
|
||||
adapter: node({
|
||||
mode: 'standalone',
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
MNQ Catering y Evento
|
||||
|
||||
- Canonical domain: https://www.mnqcatering.com
|
||||
- Canonical domain: https://www.mnqeventos.es
|
||||
- Business type: Premium catering service
|
||||
- Address: Calle Camino Vivero, 6, 29014, Málaga, España
|
||||
- Area served: Málaga (city) and Provincia de Málaga
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://www.mnqcatering.com/sitemap-index.xml
|
||||
Sitemap: https://www.mnqeventos.es/sitemap-index.xml
|
||||
|
||||
@@ -19,7 +19,7 @@ const whatsappAriaLabel = 'Contactar con MNQ por WhatsApp';
|
||||
<p>© 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más importantes de su vida.</p>
|
||||
<div style="display:flex;flex-direction:column;gap:0.35rem;margin-top:var(--space-4);">
|
||||
<a href="tel:+34678171513" class="footer-link" style="width:fit-content;">+34 678 17 15 13</a>
|
||||
<a href="https://www.mnqcatering.com" class="footer-link" style="width:fit-content;">www.mnqcatering.com</a>
|
||||
<a href="https://www.mnqeventos.es" class="footer-link" style="width:fit-content;">www.mnqeventos.es</a>
|
||||
<p class="text-body-sm" style="width:fit-content;">Calle Camino Vivero, 6, 29014, Málaga</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -30,18 +30,36 @@ const {
|
||||
structuredData,
|
||||
} = Astro.props;
|
||||
|
||||
const site = Astro.site ?? new URL('https://www.mnqcatering.com');
|
||||
const site = Astro.site ?? new URL('https://www.mnqeventos.es');
|
||||
const canonicalUrl = new URL(canonical ?? Astro.url.pathname, site).toString();
|
||||
const ogImageUrl = new URL(ogImage, site).toString();
|
||||
const baseStructuredData = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'CateringService',
|
||||
// schema.org has no "CateringService" type. CateringBusiness (a
|
||||
// LocalBusiness/FoodEstablishment subtype) is the correct type for a
|
||||
// catering company with a physical address.
|
||||
'@type': 'CateringBusiness',
|
||||
name: 'MNQ Catering y Evento',
|
||||
url: site.origin,
|
||||
description:
|
||||
'Servicio de catering para bodas, eventos corporativos y reuniones familiares con enfoque premium.',
|
||||
telephone: '+34678171513',
|
||||
serviceType: ['Bodas', 'Eventos corporativos', 'Reuniones familiares'],
|
||||
// makesOffer/Service is the correct structure for what a business offers;
|
||||
// serviceType is a property of Service, not of LocalBusiness.
|
||||
makesOffer: [
|
||||
{
|
||||
'@type': 'Offer',
|
||||
itemOffered: { '@type': 'Service', name: 'Catering para bodas' },
|
||||
},
|
||||
{
|
||||
'@type': 'Offer',
|
||||
itemOffered: { '@type': 'Service', name: 'Catering para eventos corporativos' },
|
||||
},
|
||||
{
|
||||
'@type': 'Offer',
|
||||
itemOffered: { '@type': 'Service', name: 'Catering para reuniones familiares' },
|
||||
},
|
||||
],
|
||||
// Verified business address (owner-confirmed). Geo coordinates not confirmed — left out.
|
||||
address: {
|
||||
'@type': 'PostalAddress',
|
||||
@@ -77,7 +95,7 @@ const structuredDataScripts = [
|
||||
? [structuredData]
|
||||
: []) as Array<Record<string, unknown>>),
|
||||
];
|
||||
const umamiHost = Astro.site ? Astro.site.origin : 'https://www.mnqcatering.com';
|
||||
const umamiHost = Astro.site ? Astro.site.origin : 'https://www.mnqeventos.es';
|
||||
const rawUmamiUrl = Astro.url ? import.meta.env.PUBLIC_UMAMI_URL : undefined;
|
||||
const umamiWebsiteId = import.meta.env.PUBLIC_UMAMI_WEBSITE_ID;
|
||||
const normalizedUmamiUrl = rawUmamiUrl
|
||||
|
||||
+7
-6
@@ -1,13 +1,14 @@
|
||||
import { defineMiddleware } from 'astro:middleware';
|
||||
|
||||
const CANONICAL_HOST = 'www.mnqcatering.com';
|
||||
const CANONICAL_HOST = 'www.mnqeventos.es';
|
||||
|
||||
/**
|
||||
* SEO: this site is undesirably mirrored at mnqeventos.es (same content, no
|
||||
* redirect at the DNS/hosting level). This middleware enforces the canonical
|
||||
* host at the application layer for any host that isn't exactly
|
||||
* www.mnqcatering.com (covers mnqeventos.es, www.mnqeventos.es, and the bare
|
||||
* mnqcatering.com apex).
|
||||
* SEO: enforce the canonical host at the application layer. www.mnqeventos.es
|
||||
* is the real, registered, live production domain. mnqcatering.com was an
|
||||
* intended rename that was never actually registered (confirmed via WHOIS —
|
||||
* no match) — do NOT set CANONICAL_HOST back to it unless that domain is
|
||||
* actually purchased and its DNS points at this server, or this redirect
|
||||
* will send every visitor to a host that doesn't resolve.
|
||||
*
|
||||
* NOTE: this must also be verified at the reverse-proxy/hosting layer — host
|
||||
* detection here depends on how the Host header (or X-Forwarded-Host, when
|
||||
|
||||
@@ -105,7 +105,7 @@ const whatsappAriaLabel = 'Contactar con MNQ por WhatsApp';
|
||||
<span class="label-caps text-primary">Sitio web</span>
|
||||
<div style="display:flex;align-items:center;gap:var(--space-4);">
|
||||
<Icon name="language" class="text-primary" />
|
||||
<a class="text-muted contact-link" href="https://www.mnqcatering.com">www.mnqcatering.com</a>
|
||||
<a class="text-muted contact-link" href="https://www.mnqeventos.es">www.mnqeventos.es</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import MainLayout from '../layouts/MainLayout.astro';
|
||||
<p>
|
||||
<strong>MNQ Catering y Evento</strong><br />
|
||||
Teléfono: <a href="tel:+34678171513">+34 678 17 15 13</a><br />
|
||||
Sitio web: <a href="https://www.mnqcatering.com">www.mnqcatering.com</a>
|
||||
Sitio web: <a href="https://www.mnqeventos.es">www.mnqeventos.es</a>
|
||||
</p>
|
||||
|
||||
<h2>2. Datos que tratamos</h2>
|
||||
|
||||
Reference in New Issue
Block a user