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';
|
import sitemap from '@astrojs/sitemap';
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
site: 'https://www.mnqcatering.com',
|
site: 'https://www.mnqeventos.es',
|
||||||
output: 'server',
|
output: 'server',
|
||||||
adapter: node({
|
adapter: node({
|
||||||
mode: 'standalone',
|
mode: 'standalone',
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
MNQ Catering y Evento
|
MNQ Catering y Evento
|
||||||
|
|
||||||
- Canonical domain: https://www.mnqcatering.com
|
- Canonical domain: https://www.mnqeventos.es
|
||||||
- Business type: Premium catering service
|
- Business type: Premium catering service
|
||||||
- Address: Calle Camino Vivero, 6, 29014, Málaga, España
|
- Address: Calle Camino Vivero, 6, 29014, Málaga, España
|
||||||
- Area served: Málaga (city) and Provincia de Málaga
|
- Area served: Málaga (city) and Provincia de Málaga
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
User-agent: *
|
User-agent: *
|
||||||
Allow: /
|
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>
|
<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);">
|
<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="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>
|
<p class="text-body-sm" style="width:fit-content;">Calle Camino Vivero, 6, 29014, Málaga</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -30,18 +30,36 @@ const {
|
|||||||
structuredData,
|
structuredData,
|
||||||
} = Astro.props;
|
} = 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 canonicalUrl = new URL(canonical ?? Astro.url.pathname, site).toString();
|
||||||
const ogImageUrl = new URL(ogImage, site).toString();
|
const ogImageUrl = new URL(ogImage, site).toString();
|
||||||
const baseStructuredData = {
|
const baseStructuredData = {
|
||||||
'@context': 'https://schema.org',
|
'@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',
|
name: 'MNQ Catering y Evento',
|
||||||
url: site.origin,
|
url: site.origin,
|
||||||
description:
|
description:
|
||||||
'Servicio de catering para bodas, eventos corporativos y reuniones familiares con enfoque premium.',
|
'Servicio de catering para bodas, eventos corporativos y reuniones familiares con enfoque premium.',
|
||||||
telephone: '+34 678 17 15 13',
|
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.
|
// Verified business address (owner-confirmed). Geo coordinates not confirmed — left out.
|
||||||
address: {
|
address: {
|
||||||
'@type': 'PostalAddress',
|
'@type': 'PostalAddress',
|
||||||
@@ -77,7 +95,7 @@ const structuredDataScripts = [
|
|||||||
? [structuredData]
|
? [structuredData]
|
||||||
: []) as Array<Record<string, unknown>>),
|
: []) 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 rawUmamiUrl = Astro.url ? import.meta.env.PUBLIC_UMAMI_URL : undefined;
|
||||||
const umamiWebsiteId = import.meta.env.PUBLIC_UMAMI_WEBSITE_ID;
|
const umamiWebsiteId = import.meta.env.PUBLIC_UMAMI_WEBSITE_ID;
|
||||||
const normalizedUmamiUrl = rawUmamiUrl
|
const normalizedUmamiUrl = rawUmamiUrl
|
||||||
|
|||||||
+7
-6
@@ -1,13 +1,14 @@
|
|||||||
import { defineMiddleware } from 'astro:middleware';
|
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
|
* SEO: enforce the canonical host at the application layer. www.mnqeventos.es
|
||||||
* redirect at the DNS/hosting level). This middleware enforces the canonical
|
* is the real, registered, live production domain. mnqcatering.com was an
|
||||||
* host at the application layer for any host that isn't exactly
|
* intended rename that was never actually registered (confirmed via WHOIS —
|
||||||
* www.mnqcatering.com (covers mnqeventos.es, www.mnqeventos.es, and the bare
|
* no match) — do NOT set CANONICAL_HOST back to it unless that domain is
|
||||||
* mnqcatering.com apex).
|
* 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
|
* 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
|
* 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>
|
<span class="label-caps text-primary">Sitio web</span>
|
||||||
<div style="display:flex;align-items:center;gap:var(--space-4);">
|
<div style="display:flex;align-items:center;gap:var(--space-4);">
|
||||||
<Icon name="language" class="text-primary" />
|
<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>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import MainLayout from '../layouts/MainLayout.astro';
|
|||||||
<p>
|
<p>
|
||||||
<strong>MNQ Catering y Evento</strong><br />
|
<strong>MNQ Catering y Evento</strong><br />
|
||||||
Teléfono: <a href="tel:+34678171513">+34 678 17 15 13</a><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>
|
</p>
|
||||||
|
|
||||||
<h2>2. Datos que tratamos</h2>
|
<h2>2. Datos que tratamos</h2>
|
||||||
|
|||||||
Reference in New Issue
Block a user