Compare commits

..

21 Commits

Author SHA1 Message Date
manuyasm87 b12830ad49 feat(seo): add geo coordinates to LocalBusiness schema
Geocoded from the confirmed address (Calle Borde Alegre, 1, 29014
Málaga) via OpenStreetMap/Nominatim.
2026-09-17 09:19:51 +02:00
manuyasm87 4b08a898bf fix(a11y): fix invisible text on corporativo bento cards
The three service cards (Lanzamientos de Marca, Coffee Breaks Premium,
Galas & Cenas Anuales) used dark 'on-surface' text tokens over a photo
with a dark gradient overlay -- text was effectively invisible against
the image. Every other bento-card usage on the site (bodas-reales.astro)
correctly uses text-white for this exact pattern; corporativo-business
was the one page that didn't.
2026-09-15 19:42:48 +02:00
manuyasm87 a314ab9714 fix(seo): expand areaServed schema to match confirmed GBP service area
Owner confirmed real coverage in Marbella, Benalmádena, Fuengirola, and
Torremolinos in addition to Málaga city/province -- these are already
set as the service area on Google Business Profile. Updated the JSON-LD
areaServed list and llms.txt to match, so NAP/area signals are
consistent between the site and GBP.
2026-09-15 19:02:37 +02:00
manuyasm87 d67a540738 fix(seo): correct business address to Calle Borde Alegre, 1
Replaces the previously confirmed Calle Camino Vivero, 6 -- owner gave a
corrected address. Updated in JSON-LD PostalAddress, footer, /contacto,
and llms.txt.
2026-09-15 18:24:37 +02:00
manuyasm87 d17f75c423 fix(seo): add baseline security headers; unify brand name to singular
- src/middleware.ts now sets HSTS, X-Content-Type-Options, X-Frame-Options,
  Referrer-Policy, and Permissions-Policy on every response -- all were
  absent per the 2026-09-15 audit. CSP deliberately left out: the site
  uses unnoned inline scripts, inline style attributes throughout, and a
  runtime-configured analytics script host, so a real CSP needs its own
  pass with live testing rather than a guess.
- SiteHeader.astro and SiteFooter.astro logo alt/aria-label said 'MNQ
  Catering y Eventos' (plural) while every title tag, the JSON-LD name,
  og:site_name, and package.json all say 'MNQ Catering y Evento'
  (singular) -- unified to the singular form used everywhere else.
2026-09-15 10:31:33 +02:00
manuyasm87 b084aeff6e fix(seo): exclude noindex aviso-legal page from sitemap; add full audit report
Sitemap filter was excluding cookies/ and privacidad/ but not
aviso-legal/, even though that page is marked noindex,follow -- a
noindexed page has no business being listed for crawl discovery.

Also adds docs/seo-audit/mnqcatering.com-audit/ -- the full multi-agent
SEO audit run this session against the corrected live domain
(www.mnqeventos.es), including the FULL-AUDIT-REPORT.md, ACTION-PLAN.md,
and per-category findings files.
2026-09-15 10:19:00 +02:00
manuyasm87 a6692b7540 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
2026-09-15 10:07:24 +02:00
manuyasm87 0e242a6116 docs(seo): add search-engine publication and local SEO checklist 2026-09-15 07:36:52 +02:00
manuyasm87 5741e68181 fix(seo): redirect non-canonical domains to www.mnqcatering.com
mnqeventos.es (and the bare mnqcatering.com apex) were serving the same
content as www.mnqcatering.com with no redirect, causing duplicate
content. Add middleware that 301-redirects any request whose host isn't
exactly www.mnqcatering.com to the canonical domain, preserving path and
query.

Still needs verification at the reverse-proxy/hosting layer, since host
detection here depends on how the Host header arrives in production.
2026-09-14 19:37:09 +02:00
manuyasm87 5c0ed95e9e feat(seo): add local business address and area served signals
- add PostalAddress and areaServed (Malaga city + province) to the
  sitewide JSON-LD structured data
- show the same address as visible NAP text in the footer and on the
  contact page, matching the schema exactly
- add address and area served to llms.txt for AEO/AI-crawler readability
2026-09-14 19:37:07 +02:00
manuyasm87 9218c5d483 chore(deps): upgrade astro to v7 and bump runtime to node 22
- astro 5.18.1 -> 7.3.2 (fixes critical XSS/RCE advisory GHSA-j687-52p2-xcff)
- @astrojs/node 9.5.5 -> 11.1.5
- typescript pinned to 6.0.3 (astro 7's requirement is satisfied by astro
  itself; typescript 7.x is an incompatible rewrite that breaks
  @astrojs/check, so staying on the 5||6 range it still supports)
- Dockerfile and nixpacks.toml bumped from node:20 to node:22, required by
  astro v6+ (minimum supported node is 22.12.0)
2026-09-14 19:37:05 +02:00
manuyasm87 20d50411aa chore: sync project state 2026-09-01 10:06:25 +02:00
manuyasm87 b97d0724db fix: update nosotros hero image 2026-08-14 16:08:01 +02:00
Manuel f2c8fff71e fix: replace AI-generated chef photo on reuniones-familiares
The "Cenas Privadas" card used hero-nosotros-gen.webp, an AI-generated
image with garbled embroidery text on the chef's jacket. Swap it for
a real photo of the MNQ kitchen team.
2026-07-22 00:23:36 +02:00
Manuel 92193448e1 feat: fill contacto page gap with plated dessert photo
The two-column contact grid lost its second column when the form was
removed. Restore the layout with a real branded photo (dessert plate
with an embroidered MNQ napkin) next to the contact info instead of
leaving empty space.
2026-07-22 00:16:27 +02:00
Manuel cfa9f4c444 feat: remove contact form and switch canonical domain to mnqcatering.com
Drop the non-functional contact form (no backend wired up) and keep
the WhatsApp/phone contact path as the single call to action. Also
point site config, robots.txt, llms.txt, and every on-page domain
reference at www.mnqcatering.com ahead of the DNS cutover.
2026-07-22 00:10:49 +02:00
Manuel 3917fe3997 fix: swap nosotros lead photo and drop header WhatsApp pill
Swap the lead team photo with the service/montaje photo (and give
the displaced group photo a spot in the support grid instead of
dropping it). Also remove the always-visible WhatsApp pill from the
desktop header nav since it duplicated the floating WhatsApp CTA and
the mobile drawer's own WhatsApp button.
2026-07-22 00:04:25 +02:00
Manuel 3dfbeb25b6 feat: update nosotros hero photo and trim team gallery to two photos
Replace the hero image with a real event photo, and remove the third
support photo from the team gallery. Also drop the now-orphaned
last-child full-span rule so the remaining two photos sit as equal
side-by-side columns instead of one stretching full width.
2026-07-21 23:57:06 +02:00
Manuel 6359d7f312 fix: stop team gallery photos from collapsing on desktop
The desktop breakpoint forced team-gallery-visuals into a 2-column
grid, squeezing the 3-photo support grid into ~0.9fr and shrinking
each photo to ~45px. Removing the override lets the lead photo and
support grid stack full-width as intended.
2026-07-21 23:49:35 +02:00
Manuel 87d07d495f fix: keep mobile whatsapp cta compact 2026-07-21 23:34:04 +02:00
Manuel 674272caac feat: refresh nosotros team gallery 2026-07-21 21:39:32 +02:00
111 changed files with 6116 additions and 3246 deletions
+3
View File
@@ -0,0 +1,3 @@
{
"fingerprint": "8efcd889c18b21319e7f54b14af556962cfd2d3b"
}
+396
View File
@@ -0,0 +1,396 @@
# Skill Registry — MNQ Catering y Evento
<!-- Auto-generated by gentle-ai skill-registry refresh. Run `gentle-ai skill-registry refresh --force` to regenerate. -->
Last updated: 2026-09-01
## Sources scanned
- .agents/skills
- /home/manuel/.pi/agent/skills
- /home/manuel/.agents/skills
- /home/manuel/.config/opencode/skills
- /home/manuel/.claude/skills
- /home/manuel/.gemini/skills
- /home/manuel/.gemini/antigravity/skills
- /home/manuel/.copilot/skills
- /home/manuel/.codex/skills
- /home/manuel/.codeium/windsurf/skills
- /home/manuel/.qwen/skills
- /home/manuel/.kiro/skills
- /home/manuel/.openclaw/skills
## Contract
**Delegator use only.** This registry is an index, not a summary. Any agent that launches subagents reads it to select relevant skills, then passes exact `SKILL.md` paths for the subagent to read before work.
`SKILL.md` remains the source of truth. Do not inject generated summaries or compact rules by default; pass paths so subagents load the full runtime contract and preserve author intent.
## Skills
| Skill | Trigger / description | Scope | Path |
| --- | --- | --- | --- |
| `accessibility-compliance` | Implement WCAG 2.2 compliant interfaces with mobile accessibility, inclusive design patterns, and assistive technology support. Use when auditing accessibility, implementing ARIA patterns, building for screen readers, or ensuring inclusive user experiences. | user | `/home/manuel/.agents/skills/accessibility-compliance/SKILL.md` |
| `accidental-data-loss-prevention` | **STOP AND VERIFY**: Before running any command or tool that results in irreversible data loss, you MUST obtain explicit user consent. When in doubt, ask. It is better to wait for confirmation than to accidentally delete production data or critical project assets. Use this for: - SQL: DROP TABLE/VIEW/SCHEMA/DATABASE, TRUNCATE, or broad DELETE (missing WHERE or using 1=1). - Cloud Storage: gsutil rm or gcloud storage rm targeting production data or critical buckets. - Infrastructure: gcloud projects delete, deleting Spanner/BigQuery/Dataproc resources, deleting secrets, or KMS key destruction. | user | `/home/manuel/.gemini/skills/accidental-data-loss-prevention/SKILL.md` |
| `ai-image-generation` | Generate AI images with FLUX, Gemini, Grok, Seedream, Reve and 50+ models via inference.sh CLI. Models: FLUX Dev LoRA, FLUX.2 Klein LoRA, Gemini 3 Pro Image, Grok Imagine, Seedream 4.5, Reve, ImagineArt. Capabilities: text-to-image, image-to-image, inpainting, LoRA, image editing, upscaling, text rendering. Use for: AI art, product mockups, concept art, social media graphics, marketing visuals, illustrations. Triggers: flux, image generation, ai image, text to image, stable diffusion, generate image, ai art, midjourney alternative, dall-e alternative, text2img, t2i, image generator, ai picture, create image with ai, generative ai, ai illustration, grok image, gemini image | user | `/home/manuel/.agents/skills/ai-image-generation/SKILL.md` |
| `ai-video-generation` | Generate AI videos with Google Veo, Seedance, Wan, Grok and 40+ models via inference.sh CLI. Models: Veo 3.1, Veo 3, Seedance 1.5 Pro, Wan 2.5, Grok Imagine Video, OmniHuman, Fabric, HunyuanVideo. Capabilities: text-to-video, image-to-video, lipsync, avatar animation, video upscaling, foley sound. Use for: social media videos, marketing content, explainer videos, product demos, AI avatars. Triggers: video generation, ai video, text to video, image to video, veo, animate image, video from image, ai animation, video generator, generate video, t2v, i2v, ai video maker, create video with ai, runway alternative, pika alternative, sora alternative, kling alternative | user | `/home/manuel/.agents/skills/ai-video-generation/SKILL.md` |
| `airflow-dag-patterns` | Build production Apache Airflow DAGs with best practices for operators, sensors, testing, and deployment. Use when creating data pipelines, orchestrating workflows, or scheduling batch jobs. | user | `/home/manuel/.agents/skills/airflow-dag-patterns/SKILL.md` |
| `angular-migration` | Migrate from AngularJS to Angular using hybrid mode, incremental component rewriting, and dependency injection updates. Use when upgrading AngularJS applications, planning framework migrations, or modernizing legacy Angular code. | user | `/home/manuel/.agents/skills/angular-migration/SKILL.md` |
| `animejs` | Anime.js adapter patterns for HyperFrames. Use when writing Anime.js animations or timelines inside HyperFrames compositions, registering animations on window.__hfAnime, making Anime.js seek-driven and deterministic, or translating Anime.js examples into render-safe HyperFrames HTML. | user | `/home/manuel/.pi/agent/skills/animejs/SKILL.md` |
| `anti-reversing-techniques` | Understand anti-reversing, obfuscation, and protection techniques encountered during software analysis. Use when analyzing protected binaries, bypassing anti-debugging for authorized analysis, or understanding software protection mechanisms. | user | `/home/manuel/.agents/skills/anti-reversing-techniques/SKILL.md` |
| `api-design-principles` | Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards. | user | `/home/manuel/.agents/skills/api-design-principles/SKILL.md` |
| `architecture-decision-records` | Write and maintain Architecture Decision Records (ADRs) following best practices for technical decision documentation. Use when documenting significant technical decisions, reviewing past architectural choices, or establishing decision processes. | user | `/home/manuel/.agents/skills/architecture-decision-records/SKILL.md` |
| `architecture-patterns` | Implement proven backend architecture patterns including Clean Architecture, Hexagonal Architecture, and Domain-Driven Design. Use when architecting complex backend systems or refactoring existing applications for better maintainability. | user | `/home/manuel/.agents/skills/architecture-patterns/SKILL.md` |
| `async-python-patterns` | Master Python asyncio, concurrent programming, and async/await patterns for high-performance applications. Use when building async APIs, concurrent systems, or I/O-bound applications requiring non-blocking operations. | user | `/home/manuel/.agents/skills/async-python-patterns/SKILL.md` |
| `attack-tree-construction` | Build comprehensive attack trees to visualize threat paths. Use when mapping attack scenarios, identifying defense gaps, or communicating security risks to stakeholders. | user | `/home/manuel/.agents/skills/attack-tree-construction/SKILL.md` |
| `audit-prep` | Prepare Solidity projects for a security audit — test coverage, test quality, NatSpec docs, code hygiene, dependency health, best-practice enforcement, deployment readiness, and project documentation checks. Generates a scored Audit Readiness Report and optionally runs static analysis. Trigger on: "prepare for audit", "audit readiness", "pre-audit check", "audit prep", "NatSpec check", or any request to review a Solidity codebase before a security review. | user | `/home/manuel/.claude/skills/audit-prep/SKILL.md` |
| `auth-implementation-patterns` | Master authentication and authorization patterns including JWT, OAuth2, session management, and RBAC to build secure, scalable access control systems. Use when implementing auth systems, securing APIs, or debugging security issues. | user | `/home/manuel/.agents/skills/auth-implementation-patterns/SKILL.md` |
| `autoresearch` | Run Karpathy-style autoresearch optimization on any content. Generates 50+ variants, scores with a 5-expert simulated panel, evolves winners through multiple rounds, outputs optimized version + full experiment log. Use when optimizing landing pages, email sequences, ad copy, headlines, form pages, CTA text, or any conversion-focused content. Triggers on "optimize this page", "run autoresearch", "score these variants", "A/B test this copy". | user | `/home/manuel/.pi/agent/skills/autoresearch/SKILL.md` |
| `backtesting-frameworks` | Build robust backtesting systems for trading strategies with proper handling of look-ahead bias, survivorship bias, and transaction costs. Use when developing trading algorithms, validating strategies, or building backtesting infrastructure. | user | `/home/manuel/.agents/skills/backtesting-frameworks/SKILL.md` |
| `bash-defensive-patterns` | Master defensive Bash programming techniques for production-grade scripts. Use when writing robust shell scripts, CI/CD pipelines, or system utilities requiring fault tolerance and safety. | user | `/home/manuel/.agents/skills/bash-defensive-patterns/SKILL.md` |
| `bats-testing-patterns` | Master Bash Automated Testing System (Bats) for comprehensive shell script testing. Use when writing tests for shell scripts, CI/CD pipelines, or requiring test-driven development of shell utilities. | user | `/home/manuel/.agents/skills/bats-testing-patterns/SKILL.md` |
| `bazel-build-optimization` | Optimize Bazel builds for large-scale monorepos. Use when configuring Bazel, implementing remote execution, or optimizing build performance for enterprise codebases. | user | `/home/manuel/.agents/skills/bazel-build-optimization/SKILL.md` |
| `bb-methodology` | Use at the START of any bug bounty hunting session, when switching targets, or when feeling lost about what to do next. Master orchestrator that combines the 5-phase non-linear hunting workflow with the critical thinking framework (developer psychology, anomaly detection, What-If experiments). Routes to all other skills based on current hunting phase. Also use when asking "what should I do next" or "where am I in the process. | user | `/home/manuel/.claude/skills/bb-methodology/SKILL.md` |
| `beautiful-mermaid` | Render Mermaid diagrams as SVG and PNG using the Beautiful Mermaid library. Use when the user asks to render a Mermaid diagram. | user | `/home/manuel/.pi/agent/skills/beautiful-mermaid/SKILL.md` |
| `bench` | Run benchmark and analyze PDF parsing performance | user | `/home/manuel/.agents/skills/bench/SKILL.md` |
| `bench-debug` | Debug specific document parsing failures | user | `/home/manuel/.agents/skills/bench-debug/SKILL.md` |
| `bigquery-ai-ml` | Leverages BigQuery's built-in machine learning and GenAI capabilities | user | `/home/manuel/.gemini/skills/bigquery-ai-ml/SKILL.md` |
| `bigquery-bigframes` | Generates Python code using BigQuery DataFrames (BigFrames), the pandas/scikit-learn-style\ | user | `/home/manuel/.gemini/skills/bigquery-bigframes/SKILL.md` |
| `bigquery-data-transfer-service` | Discovers and inspects BigQuery Data Transfer Service (DTS) configurations. | user | `/home/manuel/.gemini/skills/bigquery-data-transfer-service/SKILL.md` |
| `bigquery-graph` | Provides guidelines and best practices for querying and defining property | user | `/home/manuel/.gemini/skills/bigquery-graph/SKILL.md` |
| `bigquery-sql` | Provides BigQuery SQL query optimization techniques, execution best practices, | user | `/home/manuel/.gemini/skills/bigquery-sql/SKILL.md` |
| `billing-automation` | Build automated billing systems for recurring payments, invoicing, subscription lifecycle, and dunning management. Use when implementing subscription billing, automating invoicing, or managing recurring payment systems. | user | `/home/manuel/.agents/skills/billing-automation/SKILL.md` |
| `binary-analysis-patterns` | Master binary analysis patterns including disassembly, decompilation, control flow analysis, and code pattern recognition. Use when analyzing executables, understanding compiled code, or performing static analysis on binaries. | user | `/home/manuel/.agents/skills/binary-analysis-patterns/SKILL.md` |
| `brainstorming` | You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation. | user | `/home/manuel/.agents/skills/brainstorming/SKILL.md` |
| `branch-pr` | Create Gentle AI pull requests with issue-first checks. Trigger: creating, opening, or preparing PRs for review. | user | `/home/manuel/.agents/skills/branch-pr/SKILL.md` |
| `bug-bounty` | Complete bug bounty workflow — recon (subdomain enumeration, asset discovery, fingerprinting, HackerOne scope, source code audit), pre-hunt learning (disclosed reports, tech stack research, mind maps, threat modeling), vulnerability hunting (IDOR, SSRF, XSS, auth bypass, CSRF, race conditions, SQLi, XXE, file upload, business logic, GraphQL, HTTP smuggling, cache poisoning, OAuth, timing side-channels, OIDC, SSTI, subdomain takeover, cloud misconfig, ATO chains, agentic AI), LLM/AI security testing (chatbot IDOR, prompt injection, indirect injection, ASCII smuggling, exfil channels, RCE via code tools, system prompt extraction, ASI01-ASI10), A-to-B bug chaining (IDOR→auth bypass, SSRF→cloud metadata, XSS→ATO, open redirect→OAuth theft, S3→bundle→secret→OAuth), bypass tables (SSRF IP bypass, open redirect bypass, file upload bypass), language-specific grep (JS prototype pollution, Python pickle, PHP type juggling, Go template.HTML, Ruby YAML.load, Rust unwrap), and reporting (7-Question Gate, 4 validation gates, human-tone writing, templates by vuln class, CVSS 3.1, PoC generation, always-rejected list, conditional chain table, submission checklist). Use for ANY bug bounty task — starting a new target, doing recon, hunting specific vulns, auditing source code, testing AI features, validating findings, or writing reports. 中文触发词:漏洞赏金、安全测试、渗透测试、漏洞挖掘、信息收集、子域名枚举、XSS测试、SQL注入、SSRF、安全审计、漏洞报告 | user | `/home/manuel/.claude/skills/bug-bounty/SKILL.md` |
| `building-data-apps` | Build modern data apps, dashboards, and interactive reports using either React + Vite or Streamlit. Includes optional Gemini Data Analytics chat integration for an AI powered "chat with your data" experience. Relevant when any of the following conditions are true: 1. User explicitly requests to build a data dashboard, data application, or visualization UI, and the UI pulls data from a GCP database (defaulting to BigQuery unless otherwise specified). 2. You need to generate a frontend web application to interact with, query, and visualize data from GCP data sources. 3. User wants to build a "chat with your data" experience or integrate the Gemini Data Analytics chat API into a web interface. Do NOT use when any of the following conditions are true: 1. The request is for building backend-only services. 2. The request is for simple CLI scripts or command-line applications. 3. The web application is not data-centric or does not involve visualizing/querying data from GCP sources. | user | `/home/manuel/.gemini/skills/building-data-apps/SKILL.md` |
| `bypassing-authentication-with-forced-browsing` | Discovering and accessing unprotected pages, APIs, and administrative | user | `/home/manuel/.claude/skills/bypassing-authentication-with-forced-browsing/SKILL.md` |
| `chained-pr` | Trigger: PRs over 400 lines, stacked PRs, review slices. Split oversized changes into chained PRs that protect review focus. | user | `/home/manuel/.agents/skills/chained-pr/SKILL.md` |
| `changelog-automation` | Automate changelog generation from commits, PRs, and releases following Keep a Changelog format. Use when setting up release workflows, generating release notes, or standardizing commit conventions. | user | `/home/manuel/.agents/skills/changelog-automation/SKILL.md` |
| `code-review-excellence` | Master effective code review practices to provide constructive feedback, catch bugs early, and foster knowledge sharing while maintaining team morale. Use when reviewing pull requests, establishing review standards, or mentoring developers. | user | `/home/manuel/.agents/skills/code-review-excellence/SKILL.md` |
| `cognitive-doc-design` | Design docs that reduce cognitive load. Trigger: writing guides, READMEs, RFCs, onboarding, architecture, or review-facing docs. | user | `/home/manuel/.agents/skills/cognitive-doc-design/SKILL.md` |
| `cold-outbound-optimizer` | Design, analyze, and optimize cold outbound email campaigns for Instantly. Handles end-to-end ICP definition, expert panel scoring (recursive to 90+), sequence copywriting, infrastructure audit, capacity planning, and implementation docs. Use when asked to build cold outbound sequences, optimize cold email, analyze outbound campaigns, build sales sequences, build Instantly sequences, create cold outbound strategies, or design email campaigns. Supports both "start from scratch" and "optimize existing" modes. | user | `/home/manuel/.pi/agent/skills/cold-outbound-optimizer/SKILL.md` |
| `comment-writer` | Write warm, direct collaboration comments. Trigger: PR feedback, issue replies, reviews, Slack messages, or GitHub comments. | user | `/home/manuel/.agents/skills/comment-writer/SKILL.md` |
| `competitive-landscape` | This skill should be used when the user asks to "analyze competitors", "assess competitive landscape", "identify differentiation", "evaluate market positioning", "apply Porter's Five Forces", or requests competitive strategy analysis. | user | `/home/manuel/.agents/skills/competitive-landscape/SKILL.md` |
| `conducting-api-security-testing` | Conducts security testing of REST, GraphQL, and gRPC APIs to identify | user | `/home/manuel/.claude/skills/conducting-api-security-testing/SKILL.md` |
| `context-driven-development` | Creates and maintains project context artifacts (product.md, tech-stack.md, workflow.md, tracks.md) in a `conductor/` directory. Scaffolds new projects from scratch, extracts context from existing codebases, validates artifact consistency before implementation, and synchronizes documents as the project evolves. Use when setting up a project, creating or updating product docs, managing a tech stack file, defining development workflows, tracking work units, onboarding to an existing codebase, or running project scaffolding. | user | `/home/manuel/.agents/skills/context-driven-development/SKILL.md` |
| `context7-mcp` | This skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc. | user | `/home/manuel/.claude/skills/context7-mcp/SKILL.md` |
| `cost-optimization` | Optimize cloud costs through resource rightsizing, tagging strategies, reserved instances, and spending analysis. Use when reducing cloud expenses, analyzing infrastructure costs, or implementing cost governance policies. | user | `/home/manuel/.agents/skills/cost-optimization/SKILL.md` |
| `cqrs-implementation` | Implement Command Query Responsibility Segregation for scalable architectures. Use when separating read and write models, optimizing query performance, or building event-sourced systems. | user | `/home/manuel/.agents/skills/cqrs-implementation/SKILL.md` |
| `css-animations` | CSS animation adapter patterns for HyperFrames. Use when authoring CSS keyframes, animation-delay based timing, animation-fill-mode, animation-play-state, or CSS-only motion that HyperFrames must seek deterministically during preview and rendering. | user | `/home/manuel/.pi/agent/skills/css-animations/SKILL.md` |
| `data-autocleaning` | Automated data quality and transformation capabilities for Dataform/dbt/BigQuery | user | `/home/manuel/.gemini/skills/data-autocleaning/SKILL.md` |
| `data-quality-frameworks` | Implement data quality validation with Great Expectations, dbt tests, and data contracts. Use when building data quality pipelines, implementing validation rules, or establishing data contracts. | user | `/home/manuel/.agents/skills/data-quality-frameworks/SKILL.md` |
| `data-storytelling` | Transform data into compelling narratives using visualization, context, and persuasive structure. Use when presenting analytics to stakeholders, creating data reports, or building executive presentations. | user | `/home/manuel/.agents/skills/data-storytelling/SKILL.md` |
| `database-migration` | Execute database migrations across ORMs and platforms with zero-downtime strategies, data transformation, and rollback procedures. Use when migrating databases, changing schemas, performing data transformations, or implementing zero-downtime deployment strategies. | user | `/home/manuel/.agents/skills/database-migration/SKILL.md` |
| `dataform-bigquery` | Expertise in generating clean, correct, and efficient Dataform pipeline | user | `/home/manuel/.gemini/skills/dataform-bigquery/SKILL.md` |
| `dbt-bigquery` | Expert guidance for creating, modifying, and optimizing dbt pipelines | user | `/home/manuel/.gemini/skills/dbt-bigquery/SKILL.md` |
| `dbt-transformation-patterns` | Master dbt (data build tool) for analytics engineering with model organization, testing, documentation, and incremental strategies. Use when building data transformations, creating data models, or implementing analytics engineering best practices. | user | `/home/manuel/.agents/skills/dbt-transformation-patterns/SKILL.md` |
| `debugging-strategies` | Master systematic debugging techniques, profiling tools, and root cause analysis to efficiently track down bugs across any codebase or technology stack. Use when investigating bugs, performance issues, or unexpected behavior. | user | `/home/manuel/.agents/skills/debugging-strategies/SKILL.md` |
| `deck-generator` | Generate professional presentations with AI-generated images. Use when asked to create a deck, presentation, pitch deck, or slides. Supports style presets (whiteboard, corporate, minimalist, etc). Uses Imagen 4.0 API for image generation and Google Slides API for assembly. Produces full decks from markdown content specs in minutes. | user | `/home/manuel/.pi/agent/skills/deck-generator/SKILL.md` |
| `defi-protocol-templates` | Implement DeFi protocols with production-ready templates for staking, AMMs, governance, and lending systems. Use when building decentralized finance applications or smart contract protocols. | user | `/home/manuel/.agents/skills/defi-protocol-templates/SKILL.md` |
| `dependency-upgrade` | Manage major dependency version upgrades with compatibility analysis, staged rollout, and comprehensive testing. Use when upgrading framework versions, updating major dependencies, or managing breaking changes in libraries. | user | `/home/manuel/.agents/skills/dependency-upgrade/SKILL.md` |
| `deployment-pipeline-design` | Design multi-stage CI/CD pipelines with approval gates, security checks, and deployment orchestration. Use when architecting deployment workflows, setting up continuous delivery, or implementing GitOps practices. | user | `/home/manuel/.agents/skills/deployment-pipeline-design/SKILL.md` |
| `design-read-create` | Trigger: design read, design audit, visual direction, redesign, design system, UI taste, brand direction. Analyze an existing UI or create a new visual direction with explicit rules and outputs. | user | `/home/manuel/.config/opencode/skills/design-read-create/SKILL.md` |
| `design-system-patterns` | Build scalable design systems with design tokens, theming infrastructure, and component architecture patterns. Use when creating design tokens, implementing theme switching, building component libraries, or establishing design system foundations. | user | `/home/manuel/.agents/skills/design-system-patterns/SKILL.md` |
| `detecting-sql-injection-via-waf-logs` | Analyze WAF (ModSecurity/AWS WAF/Cloudflare) logs to detect SQL injection | user | `/home/manuel/.claude/skills/detecting-sql-injection-via-waf-logs/SKILL.md` |
| `developing-with-bigquery` | A repository of BigQuery-specific logic, knowledge, and specialized standards. Use this skill whenever you are doing anything with BigQuery, including: 1. BigQuery query optimization 2. BigFrames Python code 3. BigQuery ML/AI functions. | user | `/home/manuel/.gemini/antigravity/skills/developing-with-bigquery/SKILL.md` |
| `diario-personal` | Use when the user says "diario", asks to open or continue a personal journal in Obsidian, wants today's daily note, or wants a quick personal dashboard with tasks and reminders from the local Diario workspace. | user | `/home/manuel/.agents/skills/diario-personal/SKILL.md` |
| `discovering-gcp-data-assets` | Finds and inspects data assets within Google Cloud. Relevant when any of the following conditions are true: 1. The user request involves finding, exploring, or inspecting data assets in Google Cloud, such as: - BigQuery datasets, tables, or views - BigLake catalog or tables - Spanner instances, databases or tables - etc. 2. You need to retrieve the schema, metadata, or governance policies for a GCP data asset. 3. You have a keyword or topic (e.g., "sales data") but lack the specific table or resource ID. 4. You are attempting to find data using `bq ls`, as this skill offers a superior approach. Don't use when: - Assets are outside Google Cloud | user | `/home/manuel/.gemini/skills/discovering-gcp-data-assets/SKILL.md` |
| `dispatching-parallel-agents` | Use when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies | user | `/home/manuel/.agents/skills/dispatching-parallel-agents/SKILL.md` |
| `distributed-tracing` | Implement distributed tracing with Jaeger and Tempo to track requests across microservices and identify performance bottlenecks. Use when debugging microservices, analyzing request flows, or implementing observability for distributed systems. | user | `/home/manuel/.agents/skills/distributed-tracing/SKILL.md` |
| `django-expert` | Expert Django backend development guidance. Use when creating Django models, views, serializers, or APIs; debugging ORM queries or migrations; optimizing database performance; implementing authentication; writing tests; or working with Django REST Framework. Follows Django best practices and modern patterns. | user | `/home/manuel/.agents/skills/django-expert/SKILL.md` |
| `django-security` | Django security best practices, authentication, authorization, CSRF protection, SQL injection prevention, XSS prevention, and secure deployment configurations. | user | `/home/manuel/.agents/skills/django-security/SKILL.md` |
| `dotnet-backend-patterns` | Master C#/.NET backend development patterns for building robust APIs, MCP servers, and enterprise applications. Covers async/await, dependency injection, Entity Framework Core, Dapper, configuration, caching, and testing with xUnit. Use when developing .NET backends, reviewing C# code, or designing API architectures. | user | `/home/manuel/.agents/skills/dotnet-backend-patterns/SKILL.md` |
| `e2e-testing-patterns` | Master end-to-end testing with Playwright and Cypress to build reliable test suites that catch bugs, improve confidence, and enable fast deployment. Use when implementing E2E tests, debugging flaky tests, or establishing testing standards. | user | `/home/manuel/.agents/skills/e2e-testing-patterns/SKILL.md` |
| `embedding-strategies` | Select and optimize embedding models for semantic search and RAG applications. Use when choosing embedding models, implementing chunking strategies, or optimizing embedding quality for specific domains. | user | `/home/manuel/.agents/skills/embedding-strategies/SKILL.md` |
| `employment-contract-templates` | Create employment contracts, offer letters, and HR policy documents following legal best practices. Use when drafting employment agreements, creating HR policies, or standardizing employment documentation. | user | `/home/manuel/.agents/skills/employment-contract-templates/SKILL.md` |
| `enforcing-resource-attribution` | Enforces resource attribution for CLI commands. Use this skill whenever | user | `/home/manuel/.gemini/skills/enforcing-resource-attribution/SKILL.md` |
| `error-handling-patterns` | Master error handling patterns across languages including exceptions, Result types, error propagation, and graceful degradation to build resilient applications. Use when implementing error handling, designing APIs, or improving application reliability. | user | `/home/manuel/.agents/skills/error-handling-patterns/SKILL.md` |
| `event-store-design` | Design and implement event stores for event-sourced systems. Use when building event sourcing infrastructure, choosing event store technologies, or implementing event persistence patterns. | user | `/home/manuel/.agents/skills/event-store-design/SKILL.md` |
| `executing-plans` | Use when you have a written implementation plan to execute in a separate session with review checkpoints | user | `/home/manuel/.agents/skills/executing-plans/SKILL.md` |
| `expert-panel` | Score, evaluate, and iteratively improve any content or strategy using an auto-assembled panel of domain experts. Handles copy, sequences, landing pages, strategy docs, titles, charts, recruiting evaluations, or anything else that needs a quality gate. Recursively iterates until all scores hit 90+ (max 3 rounds). Use when asked to: "expert panel this", "score this", "rate these variants", "quality check this", "panel review", "which version is better", "expert score", "evaluate this copy/strategy/page", or when another skill needs a quality gate on its output. Also triggers on: "score this landing page", "expert panel these email variants", "rate this headline", "panel these charts". | user | `/home/manuel/.pi/agent/skills/expert-panel/SKILL.md` |
| `exploiting-broken-function-level-authorization` | Tests APIs for Broken Function Level Authorization (BFLA) vulnerabilities | user | `/home/manuel/.claude/skills/exploiting-broken-function-level-authorization/SKILL.md` |
| `exploiting-excessive-data-exposure-in-api` | Tests APIs for excessive data exposure where endpoints return more data | user | `/home/manuel/.claude/skills/exploiting-excessive-data-exposure-in-api/SKILL.md` |
| `exploiting-idor-vulnerabilities` | Identifying and exploiting Insecure Direct Object Reference vulnerabilities | user | `/home/manuel/.claude/skills/exploiting-idor-vulnerabilities/SKILL.md` |
| `exploiting-insecure-deserialization` | Identifying and exploiting insecure deserialization vulnerabilities in | user | `/home/manuel/.claude/skills/exploiting-insecure-deserialization/SKILL.md` |
| `exploiting-jwt-algorithm-confusion-attack` | Exploits JWT algorithm confusion vulnerabilities where the server''s | user | `/home/manuel/.claude/skills/exploiting-jwt-algorithm-confusion-attack/SKILL.md` |
| `exploiting-mass-assignment-in-rest-apis` | Discover and exploit mass assignment vulnerabilities in REST APIs to | user | `/home/manuel/.claude/skills/exploiting-mass-assignment-in-rest-apis/SKILL.md` |
| `exploiting-nosql-injection-vulnerabilities` | Detect and exploit NoSQL injection vulnerabilities in MongoDB, CouchDB, | user | `/home/manuel/.claude/skills/exploiting-nosql-injection-vulnerabilities/SKILL.md` |
| `exploiting-oauth-misconfiguration` | Identifying and exploiting OAuth 2.0 and OpenID Connect misconfigurations | user | `/home/manuel/.claude/skills/exploiting-oauth-misconfiguration/SKILL.md` |
| `exploiting-sql-injection-vulnerabilities` | Identifies and exploits SQL injection vulnerabilities in web applications | user | `/home/manuel/.claude/skills/exploiting-sql-injection-vulnerabilities/SKILL.md` |
| `exploiting-template-injection-vulnerabilities` | Detecting and exploiting Server-Side Template Injection (SSTI) vulnerabilities | user | `/home/manuel/.claude/skills/exploiting-template-injection-vulnerabilities/SKILL.md` |
| `exploiting-websocket-vulnerabilities` | Testing WebSocket implementations for authentication bypass, cross-site | user | `/home/manuel/.claude/skills/exploiting-websocket-vulnerabilities/SKILL.md` |
| `fastapi-templates` | Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects. | user | `/home/manuel/.agents/skills/fastapi-templates/SKILL.md` |
| `federate-lakehouse-catalog` | Sets up Google Cloud Lakehouse federated catalogs to remote Iceberg | user | `/home/manuel/.gemini/skills/federate-lakehouse-catalog/SKILL.md` |
| `ffmpeg` | Video and audio processing with FFmpeg. Use for format conversion, resizing, compression, audio extraction, and preparing assets for Remotion. Triggers include converting GIF to MP4, resizing video, extracting audio, compressing files, or any media transformation task. | user | `/home/manuel/.pi/agent/skills/ffmpeg/SKILL.md` |
| `finance-ops` | AI-powered financial analysis suite. Generates executive CFO briefings from QuickBooks exports (P&L, Balance Sheet, General Ledger, Cash Flow, etc.) with anomaly detection, burn rate, runway analysis, and scenario modeling. Also estimates codebase development costs with organizational overhead and AI ROI analysis. Triggers on: 'CFO briefing', 'financial analysis', 'cost briefing', 'expense review', 'runway analysis', 'burn rate', 'cost estimate', 'how much would this cost to build', 'development cost', 'Claude ROI'. | user | `/home/manuel/.pi/agent/skills/finance-ops/SKILL.md` |
| `find-skills` | Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill. | user | `/home/manuel/.agents/skills/find-skills/SKILL.md` |
| `finishing-a-development-branch` | Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup | user | `/home/manuel/.agents/skills/finishing-a-development-branch/SKILL.md` |
| `frontend-design` | Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics. | user | `/home/manuel/.codex/skills/frontend-design/SKILL.md` |
| `gcloud-auth-verification` | Guidelines for identifying and resolving missing Google Cloud authentication | user | `/home/manuel/.gemini/skills/gcloud-auth-verification/SKILL.md` |
| `gcp-composer-troubleshooting` | Provides expert guidance for troubleshooting Cloud Composer (Apache | user | `/home/manuel/.gemini/skills/gcp-composer-troubleshooting/SKILL.md` |
| `gcp-data-pipelines` | Primary entry point for building, managing, and orchestrating data pipelines | user | `/home/manuel/.gemini/skills/gcp-data-pipelines/SKILL.md` |
| `gcp-dataflow` | Guides writing, packaging, executing, and troubleshooting Apache Beam pipelines on Dataflow. Use when creating new pipelines, configuring Flex Templates, or analyzing performance of Dataflow jobs. Capabilities include Java/Python/Go setup, Cloud Build integration, and deep diagnostic analysis of job health and autoscaling. Use when: - Creating an Apache Beam Dataflow pipeline. - Creating a Google Dataflow Flex Template. - Using an existing Google Dataflow Template. - Debugging Dataflow pipeline - Troubleshooting Dataflow pipeline - Analyzing Performance of Dataflow pipeline. Key capabilities: Java/Python/Go project setup, Flex Templates (with Cloud Build), and diagnostics for streaming job health, bottlenecks, and autoscaling. Do NOT use for: - General GCP resource management unrelated to Dataflow. - Issues with other GCP services (e.g., GCE, GCS, BigQuery) unless directly impacting Dataflow pipeline execution. - Pipeline technologies other than Apache Beam on Dataflow. | user | `/home/manuel/.gemini/skills/gcp-dataflow/SKILL.md` |
| `gcp-managed-airflow-migrations` | Provides guidance for migrating Apache Airflow DAGs in Managed Service | user | `/home/manuel/.gemini/skills/gcp-managed-airflow-migrations/SKILL.md` |
| `gcp-pipeline-orchestration` | This skill helps the agent generate or update orchestration pipeline | user | `/home/manuel/.gemini/skills/gcp-pipeline-orchestration/SKILL.md` |
| `gcp-pipeline-resource-provisioning` | Automates declarative resource creation and provisioning for data pipelines, supporting BigQuery, Dataform, Dataproc, BigQuery Data Transfer Service (DTS), and other resources. It manages environment-specific configurations (dev, staging, prod) through a deployment.yaml file. Use when: - Modifying or creating deployment.yaml for deployment settings. - Resolving environment-specific variables (e.g., Project IDs, Regions) for deployment. - Provisioning supported infrastructure like BigQuery datasets/tables, Dataform resources, or DTS resources via deployment.yaml. Do not use when: - Resources already exist. - Managing resources not supported by `gcloud beta orchestration-pipelines resource-types list`. - Managing general cloud infrastructure (VMs, networks, Kubernetes, IAM policies), which are better suited for Terraform. - Infrastructure spans multiple cloud providers (AWS, Azure, etc.). - Already uses Terraform for the target resources. | user | `/home/manuel/.gemini/skills/gcp-pipeline-resource-provisioning/SKILL.md` |
| `gcp-spark` | Develops and executes Spark code on Dataproc Clusters and Serverless. Reads and writes data using BigLake Iceberg catalogs, BigQuery and Spanner. Debugs execution failures. Use when: - Writing Spark ETL pipelines on GCP. - Training or running inference with ML models with spark on GCP. - Managing Spark clusters, jobs, batches, and interactive sessions. Don't use when: - Writing generic Python scripts that don't use Spark. - Performing simple SQL queries that can be done directly in BigQuery. | user | `/home/manuel/.gemini/skills/gcp-spark/SKILL.md` |
| `gcs-security-assessment` | Assesses security posture, evaluates risks, and checks SAIF compliance | user | `/home/manuel/.gemini/skills/gcs-security-assessment/SKILL.md` |
| `gdpr-data-handling` | Implement GDPR-compliant data handling with consent management, data subject rights, and privacy by design. Use when building systems that process EU personal data, implementing privacy controls, or conducting GDPR compliance reviews. | user | `/home/manuel/.agents/skills/gdpr-data-handling/SKILL.md` |
| `gentle-ai-bench` | Trigger: bench, journey, journeys, driven mode, gentle-ai-bench, journey corpus, j-numbers, bench axis. Author and verify gentle-ai bench journeys; go test ./bench never proves driven execution. | user | `/home/manuel/.agents/skills/gentle-ai-bench/SKILL.md` |
| `git-advanced-workflows` | Master advanced Git workflows including rebasing, cherry-picking, bisect, worktrees, and reflog to maintain clean history and recover from any situation. Use when managing complex Git histories, collaborating on feature branches, or troubleshooting repository issues. | user | `/home/manuel/.agents/skills/git-advanced-workflows/SKILL.md` |
| `gitea-status-report-html-pdf` | Use when the user asks for an executive + technical Gitea status report, a one-page HTML dashboard, or a PDF export of that dashboard for stakeholders. Triggers include "informe de Gitea", "status report", "informe ejecutivo del repo", "HTML del informe", "imprimir en PDF", or any request to summarize repositories, PRs, issues, milestones, CI, and contributors in a stakeholder-ready artifact. | user | `/home/manuel/.config/opencode/skills/gitea-status-report-html-pdf/SKILL.md` |
| `gitea-workflow` | Use when working with Gitea-hosted repos, creating issues or PRs in Gitea, checking Actions status, merging protected branches, or debugging Gitea-specific workflow quirks. | user | `/home/manuel/.config/opencode/skills/gitea-workflow/SKILL.md` |
| `github-actions-templates` | Create production-ready GitHub Actions workflows for automated testing, building, and deploying applications. Use when setting up CI/CD with GitHub Actions, automating development workflows, or creating reusable workflow templates. | user | `/home/manuel/.agents/skills/github-actions-templates/SKILL.md` |
| `gitlab-ci-patterns` | Build GitLab CI/CD pipelines with multi-stage workflows, caching, and distributed runners for scalable automation. Use when implementing GitLab CI/CD, optimizing pipeline performance, or setting up automated testing and deployment. | user | `/home/manuel/.agents/skills/gitlab-ci-patterns/SKILL.md` |
| `gitops-workflow` | Implement GitOps workflows with ArgoCD and Flux for automated, declarative Kubernetes deployments with continuous reconciliation. Use when implementing GitOps practices, automating Kubernetes deployments, or setting up declarative infrastructure management. | user | `/home/manuel/.agents/skills/gitops-workflow/SKILL.md` |
| `go-concurrency-patterns` | Master Go concurrency with goroutines, channels, sync primitives, and context. Use when building concurrent Go applications, implementing worker pools, or debugging race conditions. | user | `/home/manuel/.agents/skills/go-concurrency-patterns/SKILL.md` |
| `go-testing` | Trigger: Go tests, go test coverage, Bubbletea teatest, golden files. Apply focused Go testing patterns. | user | `/home/manuel/.agents/skills/go-testing/SKILL.md` |
| `godot-gdscript-patterns` | Master Godot 4 GDScript patterns including signals, scenes, state machines, and optimization. Use when building Godot games, implementing game systems, or learning GDScript best practices. | user | `/home/manuel/.agents/skills/godot-gdscript-patterns/SKILL.md` |
| `grafana-dashboards` | Create and manage production Grafana dashboards for real-time visualization of system and application metrics. Use when building monitoring dashboards, visualizing metrics, or creating operational observability interfaces. | user | `/home/manuel/.agents/skills/grafana-dashboards/SKILL.md` |
| `graphify` | any input (code, docs, papers, images) → knowledge graph → clustered communities → HTML + JSON + audit report | user | `/home/manuel/.config/opencode/skills/graphify/SKILL.md` |
| `gsap` | GSAP animation reference for HyperFrames. Covers gsap.to(), from(), fromTo(), easing, stagger, defaults, timelines (gsap.timeline(), position parameter, labels, nesting, playback), and performance (transforms, will-change, quickTo). Use when writing GSAP animations in HyperFrames compositions. | user | `/home/manuel/.pi/agent/skills/gsap/SKILL.md` |
| `helm-chart-scaffolding` | Design, organize, and manage Helm charts for templating and packaging Kubernetes applications with reusable configurations. Use when creating Helm charts, packaging Kubernetes applications, or implementing templated deployments. | user | `/home/manuel/.agents/skills/helm-chart-scaffolding/SKILL.md` |
| `huashu-design` | 花叔Design(Huashu-Design)——用HTML做高保真原型、交互Demo、幻灯片、动画、设计变体探索+设计方向顾问+专家评审的一体化设计能力。HTML是工具不是媒介,根据任务embody不同专家(UX设计师/动画师/幻灯片设计师/原型师),避免web design tropes。触发词:做原型、设计Demo、交互原型、HTML演示、动画Demo、设计变体、hi-fi设计、UI mockup、prototype、设计探索、做个HTML页面、做个可视化、app原型、iOS原型、移动应用mockup、导出MP4、导出GIF、60fps视频、设计风格、设计方向、设计哲学、配色方案、视觉风格、推荐风格、选个风格、做个好看的、评审、好不好看、review this design。**主干能力**:Junior Designer工作流(先给假设+reasoning+placeholder再迭代)、反AI slop清单、React+Babel最佳实践、Tweaks变体切换、Speaker Notes演示、Starter Components(幻灯片外壳/变体画布/动画引擎/设备边框)、App原型专属守则(默认从Wikimedia/Met/Unsplash取真图、每台iPhone包AppPhone状态管理器可交互、交付前跑Playwright点击测试)、Playwright验证、HTML动画→MP4/GIF视频导出(25fps基础 + 60fps插帧 + palette优化GIF + 6首场景化BGM + 自动fade)。**需求模糊时的Fallback**:设计方向顾问模式——从5流派×20种设计哲学(Pentagram信息建筑/Field.io运动诗学/Kenya Hara东方极简/Sagmeister实验先锋等)推荐3个差异化方向,展示24个预制showcase(8场景×3风格),并行生成3个视觉Demo让用户选。**交付后可选**:专家级5维度评审(哲学一致性/视觉层级/细节执行/功能性/创新性各打10分+修复清单)。 | user | `/home/manuel/.pi/agent/skills/huashu-design/SKILL.md` |
| `hybrid-cloud-networking` | Configure secure, high-performance connectivity between on-premises infrastructure and cloud platforms using VPN and dedicated connections. Use when building hybrid cloud architectures, connecting data centers to cloud, or implementing secure cross-premises networking. | user | `/home/manuel/.agents/skills/hybrid-cloud-networking/SKILL.md` |
| `hybrid-search-implementation` | Combine vector and keyword search for improved retrieval. Use when implementing RAG systems, building search engines, or when neither approach alone provides sufficient recall. | user | `/home/manuel/.agents/skills/hybrid-search-implementation/SKILL.md` |
| `hyperframes` | Create video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML. Use when asked to build any HTML-based video content, add captions or subtitles synced to audio, generate text-to-speech narration, create audio-reactive animation (beat sync, glow, pulse driven by music), add animated text highlighting (marker sweeps, hand-drawn circles, burst lines, scribble, sketchout), or add transitions between scenes (crossfades, wipes, reveals, shader transitions). Covers composition authoring, timing, media, and the full video production workflow. For CLI commands (init, lint, preview, render, transcribe, tts) see the hyperframes-cli skill. | user | `/home/manuel/.pi/agent/skills/hyperframes/SKILL.md` |
| `hyperframes-cli` | HyperFrames CLI tool — hyperframes init, lint, inspect, preview, render, transcribe, tts, doctor, browser, info, upgrade, compositions, docs, benchmark. Use when scaffolding a project, linting, validating, inspecting visual layout in compositions, previewing in the studio, rendering to video, transcribing audio, generating TTS, or troubleshooting the HyperFrames environment. | user | `/home/manuel/.pi/agent/skills/hyperframes-cli/SKILL.md` |
| `hyperframes-media` | Asset preprocessing for HyperFrames compositions — text-to-speech narration (Kokoro), audio/video transcription (Whisper), and background removal for transparent overlays (u2net). Use when generating voiceover from text, transcribing speech for captions, removing the background from a video or image to use as a transparent overlay, choosing a TTS voice or whisper model, or chaining these (TTS → transcribe → captions). Each command downloads its own model on first run. | user | `/home/manuel/.pi/agent/skills/hyperframes-media/SKILL.md` |
| `hyperframes-registry` | Install and wire registry blocks and components into HyperFrames compositions. Use when running hyperframes add, installing a block or component, wiring an installed item into index.html, or working with hyperframes.json. Covers the add command, install locations, block sub-composition wiring, component snippet merging, and registry discovery. | user | `/home/manuel/.pi/agent/skills/hyperframes-registry/SKILL.md` |
| `imagegen` | Use when the user asks to generate or edit images via the OpenAI Image API (for example: generate image, edit/inpaint/mask, background removal or replacement, transparent background, product shots, concept art, covers, or batch variants); run the bundled CLI (`scripts/image_gen.py`) and require `OPENAI_API_KEY` for live calls. | user | `/home/manuel/.codex/skills/imagegen/SKILL.md` |
| `implementing-secret-scanning-with-gitleaks` | This skill covers implementing Gitleaks for detecting and preventing | user | `/home/manuel/.claude/skills/implementing-secret-scanning-with-gitleaks/SKILL.md` |
| `incident-runbook-templates` | Create structured incident response runbooks with step-by-step procedures, escalation paths, and recovery actions. Use when building runbooks, responding to incidents, or establishing incident response procedures. | user | `/home/manuel/.agents/skills/incident-runbook-templates/SKILL.md` |
| `integrating-dast-with-owasp-zap-in-pipeline` | This skill covers integrating OWASP ZAP (Zed Attack Proxy) for Dynamic | user | `/home/manuel/.claude/skills/integrating-dast-with-owasp-zap-in-pipeline/SKILL.md` |
| `interaction-design` | Design and implement microinteractions, motion design, transitions, and user feedback patterns. Use when adding polish to UI interactions, implementing loading states, or creating delightful user experiences. | user | `/home/manuel/.agents/skills/interaction-design/SKILL.md` |
| `interface-design` | This skill is for interface design — dashboards, admin panels, apps, tools, and interactive products. NOT for marketing design (landing pages, marketing sites, campaigns). | user | `/home/manuel/.agents/skills/interface-design/SKILL.md` |
| `issue-creation` | Create and triage GitHub issues from repository evidence. Trigger: issue creation, bug reports, feature requests, or issue approval. | user | `/home/manuel/.agents/skills/issue-creation/SKILL.md` |
| `istio-traffic-management` | Configure Istio traffic management including routing, load balancing, circuit breakers, and canary deployments. Use when implementing service mesh traffic policies, progressive delivery, or resilience patterns. | user | `/home/manuel/.agents/skills/istio-traffic-management/SKILL.md` |
| `javascript-testing-patterns` | Implement comprehensive testing strategies using Jest, Vitest, and Testing Library for unit tests, integration tests, and end-to-end testing with mocking, fixtures, and test-driven development. Use when writing JavaScript/TypeScript tests, setting up test infrastructure, or implementing TDD/BDD workflows. | user | `/home/manuel/.agents/skills/javascript-testing-patterns/SKILL.md` |
| `judgment-day` | Trigger: judgment day, dual review, adversarial review, juzgar. Run explicit blind dual review with at most two scoped fix/re-judgment rounds. | user | `/home/manuel/.agents/skills/judgment-day/SKILL.md` |
| `k8s-manifest-generator` | Create production-ready Kubernetes manifests for Deployments, Services, ConfigMaps, and Secrets following best practices and security standards. Use when generating Kubernetes YAML manifests, creating K8s resources, or implementing production-grade Kubernetes configurations. | user | `/home/manuel/.agents/skills/k8s-manifest-generator/SKILL.md` |
| `k8s-security-policies` | Implement Kubernetes security policies including NetworkPolicy, PodSecurityPolicy, and RBAC for production-grade security. Use when securing Kubernetes clusters, implementing network isolation, or enforcing pod security standards. | user | `/home/manuel/.agents/skills/k8s-security-policies/SKILL.md` |
| `kpi-dashboard-design` | Design effective KPI dashboards with metrics selection, visualization best practices, and real-time monitoring patterns. Use when building business dashboards, selecting metrics, or designing data visualization layouts. | user | `/home/manuel/.agents/skills/kpi-dashboard-design/SKILL.md` |
| `langchain-architecture` | Design LLM applications using LangChain 1.x and LangGraph for agents, memory, and tool integration. Use when building LangChain applications, implementing AI agents, or creating complex LLM workflows. | user | `/home/manuel/.agents/skills/langchain-architecture/SKILL.md` |
| `lark-contact` | 飞书通讯录:查询组织架构、人员信息和搜索员工。获取当前用户或指定用户的详细信息、通过关键词搜索员工(姓名/邮箱/手机号)。当用户需要查看个人信息、查找同事 open_id 或联系方式、按姓名搜索员工、查询部门结构时使用。 | user | `/home/manuel/.pi/agent/skills/lark-contact/SKILL.md` |
| `lark-shared` | 飞书/Lark CLI 共享基础:应用配置初始化、认证登录(auth login)、身份切换(--as user/bot)、权限与 scope 管理、Permission denied 错误处理、安全规则。当用户需要第一次配置(`lark-cli config init`)、使用登录授权(`lark-cli auth login`)、遇到权限不足、切换 user/bot 身份、配置 scope、或首次使用 lark-cli 时触发。 | user | `/home/manuel/.pi/agent/skills/lark-shared/SKILL.md` |
| `linkerd-patterns` | Implement Linkerd service mesh patterns for lightweight, security-focused service mesh deployments. Use when setting up Linkerd, configuring traffic policies, or implementing zero-trust networking with minimal overhead. | user | `/home/manuel/.agents/skills/linkerd-patterns/SKILL.md` |
| `llm-evaluation` | Implement comprehensive evaluation strategies for LLM applications using automated metrics, human feedback, and benchmarking. Use when testing LLM performance, measuring AI application quality, or establishing evaluation frameworks. | user | `/home/manuel/.agents/skills/llm-evaluation/SKILL.md` |
| `lottie` | Lottie and dotLottie adapter patterns for HyperFrames. Use when embedding lottie-web JSON animations, .lottie files, @lottiefiles/dotlottie-web players, registering instances on window.__hfLottie, or making After Effects exports deterministic in HyperFrames. | user | `/home/manuel/.pi/agent/skills/lottie/SKILL.md` |
| `managing-python-dependencies` | Ensures proper Python dependency management, avoiding global `pip install` and adhering to project-specific tooling. Use this skill if any of the following are true: 1. Attempting to run `pip install {package_name}`. 2. Python packages or dependencies need to be added or modified. 3. Initiating a new Python project. 4. Creating a new notebook, even if just using BigQuery cells. 5. Generating Python code that includes `import` statements for third-party libraries. 6. Before executing Python scripts via the terminal to ensure the correct virtual environment is active. | user | `/home/manuel/.gemini/skills/managing-python-dependencies/SKILL.md` |
| `market` | — | user | `/home/manuel/.claude/skills/market/SKILL.md` |
| `market-ads` | — | user | `/home/manuel/.claude/skills/market-ads/SKILL.md` |
| `market-audit` | — | user | `/home/manuel/.claude/skills/market-audit/SKILL.md` |
| `market-brand` | — | user | `/home/manuel/.claude/skills/market-brand/SKILL.md` |
| `market-competitors` | — | user | `/home/manuel/.claude/skills/market-competitors/SKILL.md` |
| `market-copy` | — | user | `/home/manuel/.claude/skills/market-copy/SKILL.md` |
| `market-emails` | — | user | `/home/manuel/.claude/skills/market-emails/SKILL.md` |
| `market-funnel` | — | user | `/home/manuel/.claude/skills/market-funnel/SKILL.md` |
| `market-landing` | — | user | `/home/manuel/.claude/skills/market-landing/SKILL.md` |
| `market-launch` | — | user | `/home/manuel/.claude/skills/market-launch/SKILL.md` |
| `market-proposal` | — | user | `/home/manuel/.claude/skills/market-proposal/SKILL.md` |
| `market-report` | — | user | `/home/manuel/.claude/skills/market-report/SKILL.md` |
| `market-report-pdf` | — | user | `/home/manuel/.claude/skills/market-report-pdf/SKILL.md` |
| `market-seo` | — | user | `/home/manuel/.claude/skills/market-seo/SKILL.md` |
| `market-sizing-analysis` | This skill should be used when the user asks to "calculate TAM", "determine SAM", "estimate SOM", "size the market", "calculate market opportunity", "what's the total addressable market", or requests market sizing analysis for a startup or business opportunity. | user | `/home/manuel/.agents/skills/market-sizing-analysis/SKILL.md` |
| `market-social` | — | user | `/home/manuel/.claude/skills/market-social/SKILL.md` |
| `meme-coin-audit` | Meme coin and token security audit — rug pull detection (honeypot, hidden mint, fee manipulation, LP lock bypass), Solana SPL token analysis (freeze authority, mint authority, metadata mutability), Token-2022 extension risks (transfer hooks, permanent delegate), DEX liquidity pool attacks (sandwich amplification, LP drain, bonding curve exploits), pump.fun/Raydium/Jupiter integration risks, token_scanner.py automation, and real exploit examples from 2024-2025. Use for any token audit, rug pull assessment, meme coin security review, or pre-investment due diligence. | user | `/home/manuel/.claude/skills/meme-coin-audit/SKILL.md` |
| `memory-forensics` | Master memory forensics techniques including memory acquisition, process analysis, and artifact extraction using Volatility and related tools. Use when analyzing memory dumps, investigating incidents, or performing malware analysis from RAM captures. | user | `/home/manuel/.agents/skills/memory-forensics/SKILL.md` |
| `memory-safety-patterns` | Implement memory-safe programming with RAII, ownership, smart pointers, and resource management across Rust, C++, and C. Use when writing safe systems code, managing resources, or preventing memory bugs. | user | `/home/manuel/.agents/skills/memory-safety-patterns/SKILL.md` |
| `microservices-patterns` | Design microservices architectures with service boundaries, event-driven communication, and resilience patterns. Use when building distributed systems, decomposing monoliths, or implementing microservices. | user | `/home/manuel/.agents/skills/microservices-patterns/SKILL.md` |
| `ml-best-practices` | CRITICAL RULE: You MUST use this skill whenever the task involves any machine learning tasks or data analysis. Use this skill if the user's prompt or requirements mention any of the following: * Clustering * Classification * Regression * Time series forecasting * Statistical testing * Model comparison * ML * Data analysis SQL/BigQuery ML HANDOFF: If the user requires a SQL solution, use this skill to dictate the ANALYSIS STEPS (e.g., markdown analysis cells, visualization logic), but defer to `bigquery` for all SQL syntax. | user | `/home/manuel/.gemini/skills/ml-best-practices/SKILL.md` |
| `ml-pipeline-workflow` | Build end-to-end MLOps pipelines from data preparation through model training, validation, and production deployment. Use when creating ML pipelines, implementing MLOps practices, or automating model training and deployment workflows. | user | `/home/manuel/.agents/skills/ml-pipeline-workflow/SKILL.md` |
| `mobile-android-design` | Master Material Design 3 and Jetpack Compose patterns for building native Android apps. Use when designing Android interfaces, implementing Compose UI, or following Google's Material Design guidelines. | user | `/home/manuel/.agents/skills/mobile-android-design/SKILL.md` |
| `mobile-ios-design` | Master iOS Human Interface Guidelines and SwiftUI patterns for building native iOS apps. Use when designing iOS interfaces, implementing SwiftUI views, or ensuring apps follow Apple's design principles. | user | `/home/manuel/.agents/skills/mobile-ios-design/SKILL.md` |
| `modern-javascript-patterns` | Master ES6+ features including async/await, destructuring, spread operators, arrow functions, promises, modules, iterators, generators, and functional programming patterns for writing clean, efficient JavaScript code. Use when refactoring legacy code, implementing modern patterns, or optimizing JavaScript applications. | user | `/home/manuel/.agents/skills/modern-javascript-patterns/SKILL.md` |
| `monorepo-management` | Master monorepo management with Turborepo, Nx, and pnpm workspaces to build efficient, scalable multi-package repositories with optimized builds and dependency management. Use when setting up monorepos, optimizing builds, or managing shared dependencies. | user | `/home/manuel/.agents/skills/monorepo-management/SKILL.md` |
| `mtls-configuration` | Configure mutual TLS (mTLS) for zero-trust service-to-service communication. Use when implementing zero-trust networking, certificate management, or securing internal service communication. | user | `/home/manuel/.agents/skills/mtls-configuration/SKILL.md` |
| `multi-cloud-architecture` | Design multi-cloud architectures using a decision framework to select and integrate services across AWS, Azure, and GCP. Use when building multi-cloud systems, avoiding vendor lock-in, or leveraging best-of-breed services from multiple providers. | user | `/home/manuel/.agents/skills/multi-cloud-architecture/SKILL.md` |
| `multi-reviewer-patterns` | Coordinate parallel code reviews across multiple quality dimensions with finding deduplication, severity calibration, and consolidated reporting. Use this skill when organizing multi-reviewer code reviews, calibrating finding severity, or consolidating review results. | user | `/home/manuel/.agents/skills/multi-reviewer-patterns/SKILL.md` |
| `nanobanana-skill` | Generate or edit images using Google Gemini API via nanobanana. Triggers: "nanobanana", "generate image", "create image", "edit image", "AI drawing", "图片生成", "AI绘图", "图片编辑", "生成图片". | project | `/home/manuel/Documentos/Proyectos/MNQ Catering y Evento/.agents/skills/nanobanana-skill/SKILL.md` |
| `nextjs-app-router-patterns` | Master Next.js 14+ App Router with Server Components, streaming, parallel routes, and advanced data fetching. Use when building Next.js applications, implementing SSR/SSG, or optimizing React Server Components. | user | `/home/manuel/.agents/skills/nextjs-app-router-patterns/SKILL.md` |
| `nft-standards` | Implement NFT standards (ERC-721, ERC-1155) with proper metadata handling, minting strategies, and marketplace integration. Use when creating NFT contracts, building NFT marketplaces, or implementing digital asset systems. | user | `/home/manuel/.agents/skills/nft-standards/SKILL.md` |
| `nodejs-backend-patterns` | Build production-ready Node.js backend services with Express/Fastify, implementing middleware patterns, error handling, authentication, database integration, and API design best practices. Use when creating Node.js servers, REST APIs, GraphQL backends, or microservices architectures. | user | `/home/manuel/.agents/skills/nodejs-backend-patterns/SKILL.md` |
| `notebook-guidance` | This skill guides the use of Jupyter notebooks for data analysis, exploration, and visualization, particularly with BigQuery. It outlines best practices for notebook execution and validation (supporting both cell-by-cell execution and full notebook generation depending on tool availability), library installation, and structuring notebooks for clarity. It also covers specific rules for data cleaning, plotting, and integrating with BigQuery SQL and machine learning workflows. Relevant when any of the following conditions are true: 1. The user request involves a data analysis, data exploration, data visualization, or data insights task that requires multiple steps, queries, or visualizations to answer. 2. The user explicitly requests a notebook (.ipynb). 3. You are creating, editing, or executing cells in a Jupyter notebook. 4. You need to query BigQuery from within a notebook. DO NOT use the Python BigQuery client library; instead, you MUST use the `%%bqsql` magics explained in this skill. | user | `/home/manuel/.gemini/skills/notebook-guidance/SKILL.md` |
| `nx-workspace-patterns` | Configure and optimize Nx monorepo workspaces. Use when setting up Nx, configuring project boundaries, optimizing build caching, or implementing affected commands. | user | `/home/manuel/.agents/skills/nx-workspace-patterns/SKILL.md` |
| `obsidian-bases` | Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian. | user | `/home/manuel/.agents/skills/obsidian-bases/SKILL.md` |
| `obsidian-cli` | Interact with Obsidian vaults using the Obsidian CLI to read, create, search, and manage notes, tasks, properties, and more. Also supports plugin and theme development with commands to reload plugins, run JavaScript, capture errors, take screenshots, and inspect the DOM. Use when the user asks to interact with their Obsidian vault, manage notes, search vault content, perform vault operations from the command line, or develop and debug Obsidian plugins and themes. | user | `/home/manuel/.agents/skills/obsidian-cli/SKILL.md` |
| `obsidian-markdown` | Create and edit Obsidian Flavored Markdown with wikilinks, embeds, callouts, properties, and other Obsidian-specific syntax. Use when working with .md files in Obsidian, or when the user mentions wikilinks, callouts, frontmatter, tags, embeds, or Obsidian notes. | user | `/home/manuel/.agents/skills/obsidian-markdown/SKILL.md` |
| `odoo-19` | Odoo 19 development knowledge base with 18 specialized guides covering Actions (ir.actions.*, cron jobs, server actions), Controllers (HTTP routing, endpoints, auth types), Data files (XML/CSV records, shortcuts, noupdate), API Decorators (@api.depends, @api.constrains, @api.ondelete, @api.onchange, @api.model), Module development (manifest, wizards, reports), Field types (Char, Text, Monetary, relational fields), Manifest configuration (__manifest__.py, dependencies, asset bundles), Mixins (mail.thread, mail.activity.mixin, mail.alias.mixin, utm.mixin), ORM Model methods (search, CRUD, domain filters, recordsets, prefetch), Migration scripts (pre/post/end hooks, data migration), OWL frontend components (hooks, services, lifecycle), Performance optimization (N+1 prevention, batch ops, read_group), QWeb Reports (PDF/HTML, paper formats, barcodes), Security/ACL (record rules, field permissions, multi-company), Testing (TransactionCase, HttpCase, mocking, query count assertions), Transactions (savepoints, UniqueViolation, serialization failures), Translations (i18n, PO files, translatable fields), XML Views (list/form/search, xpath inheritance, QWeb templates). Use when writing, reviewing, or debugging any Odoo 19 Python or XML code, creating or modifying modules, fixing performance issues, or looking up Odoo 19 API patterns and best practices. | user | `/home/manuel/.agents/skills/odoo-19/SKILL.md` |
| `odoo-development` | Expert guidance for Odoo ERP development including Python ORM, XML views, and module architecture | user | `/home/manuel/.agents/skills/odoo-development/SKILL.md` |
| `odoo-oca-developer` | Expert guidance for developing, migrating, and maintaining Odoo modules (versions 14.0-19.0) following OCA conventions. Use when working with Odoo modules to create new modules from OCA template, migrate modules between versions using OpenUpgrade, extend core Odoo modules, ensure OCA compliance, and structure module files correctly. Includes OCA coding standards, module structure templates, OpenUpgrade migration patterns, and validation tools. | user | `/home/manuel/.pi/agent/skills/odoo-oca-developer/SKILL.md` |
| `on-call-handoff-patterns` | Master on-call shift handoffs with context transfer, escalation procedures, and documentation. Use when transitioning on-call responsibilities, documenting shift summaries, or improving on-call processes. | user | `/home/manuel/.agents/skills/on-call-handoff-patterns/SKILL.md` |
| `openapi-spec-generation` | Generate and maintain OpenAPI 3.1 specifications from code, design-first specs, and validation patterns. Use when creating API documentation, generating SDKs, or ensuring API contract compliance. | user | `/home/manuel/.agents/skills/openapi-spec-generation/SKILL.md` |
| `parallel-debugging` | Debug complex issues using competing hypotheses with parallel investigation, evidence collection, and root cause arbitration. Use this skill when debugging bugs with multiple potential causes, performing root cause analysis, or organizing parallel investigation workflows. | user | `/home/manuel/.agents/skills/parallel-debugging/SKILL.md` |
| `parallel-feature-development` | Coordinate parallel feature development with file ownership strategies, conflict avoidance rules, and integration patterns for multi-agent implementation. Use this skill when decomposing features for parallel development, establishing file ownership boundaries, or managing integration between parallel work streams. | user | `/home/manuel/.agents/skills/parallel-feature-development/SKILL.md` |
| `paypal-integration` | Integrate PayPal payment processing with support for express checkout, subscriptions, and refund management. Use when implementing PayPal payments, processing online transactions, or building e-commerce checkout flows. | user | `/home/manuel/.agents/skills/paypal-integration/SKILL.md` |
| `pci-compliance` | Implement PCI DSS compliance requirements for secure handling of payment card data and payment systems. Use when securing payment processing, achieving PCI compliance, or implementing payment card security measures. | user | `/home/manuel/.agents/skills/pci-compliance/SKILL.md` |
| `pdf` | Use when tasks involve reading, creating, or reviewing PDF files where rendering and layout matter; prefer visual checks by rendering pages (Poppler) and use Python tools such as `reportlab`, `pdfplumber`, and `pypdf` for generation and extraction. | user | `/home/manuel/.codex/skills/pdf/SKILL.md` |
| `performing-directory-traversal-testing` | Testing web applications for path traversal vulnerabilities that allow | user | `/home/manuel/.claude/skills/performing-directory-traversal-testing/SKILL.md` |
| `performing-second-order-sql-injection` | Detect and exploit second-order SQL injection vulnerabilities where malicious | user | `/home/manuel/.claude/skills/performing-second-order-sql-injection/SKILL.md` |
| `performing-security-headers-audit` | Auditing HTTP security headers including CSP, HSTS, X-Frame-Options, | user | `/home/manuel/.claude/skills/performing-security-headers-audit/SKILL.md` |
| `performing-ssrf-vulnerability-exploitation` | Test for Server-Side Request Forgery vulnerabilities by probing cloud | user | `/home/manuel/.claude/skills/performing-ssrf-vulnerability-exploitation/SKILL.md` |
| `performing-web-application-firewall-bypass` | Bypass Web Application Firewall protections using encoding techniques, | user | `/home/manuel/.claude/skills/performing-web-application-firewall-bypass/SKILL.md` |
| `performing-web-cache-deception-attack` | Execute web cache deception attacks by exploiting path normalization | user | `/home/manuel/.claude/skills/performing-web-cache-deception-attack/SKILL.md` |
| `performing-web-cache-poisoning-attack` | Exploiting web cache mechanisms to serve malicious content to other users | user | `/home/manuel/.claude/skills/performing-web-cache-poisoning-attack/SKILL.md` |
| `podcast-pipeline` | Podcast-to-Everything content pipeline. Takes a podcast RSS feed or raw transcript and generates a full cross-platform content calendar: short-form video clips, Twitter/X threads, LinkedIn articles, newsletter sections, quote cards, blog outlines with SEO keywords, and YouTube Shorts/TikTok scripts. Scores each piece by viral potential (novelty × controversy × utility) and deduplicates against recent output. Use when asked to: "repurpose this podcast", "turn this episode into content", "podcast content calendar", "extract clips from this episode", "podcast to social", "content from RSS feed", "batch process episodes", or any request to turn podcast/audio content into a multi-platform content plan. | user | `/home/manuel/.pi/agent/skills/podcast-pipeline/SKILL.md` |
| `postgresql-table-design` | Design a PostgreSQL-specific schema. Covers best-practices, data types, indexing, constraints, performance patterns, and advanced features | user | `/home/manuel/.agents/skills/postgresql-table-design/SKILL.md` |
| `postmortem-writing` | Write effective blameless postmortems with root cause analysis, timelines, and action items. Use when conducting incident reviews, writing postmortem documents, or improving incident response processes. | user | `/home/manuel/.agents/skills/postmortem-writing/SKILL.md` |
| `project-docs` | Bootstraps README.md, AGENTS.md, and DESIGN.md for any project. Trigger: When user says "inicializar proyecto", "setup docs", "crear docs del proyecto", "project docs", "bootstrap project", or starts a new project from scratch. | user | `/home/manuel/.claude/skills/project-docs/SKILL.md` |
| `projection-patterns` | Build read models and projections from event streams. Use when implementing CQRS read sides, building materialized views, or optimizing query performance in event-sourced systems. | user | `/home/manuel/.agents/skills/projection-patterns/SKILL.md` |
| `prometheus-configuration` | Set up Prometheus for comprehensive metric collection, storage, and monitoring of infrastructure and applications. Use when implementing metrics collection, setting up monitoring infrastructure, or configuring alerting systems. | user | `/home/manuel/.agents/skills/prometheus-configuration/SKILL.md` |
| `prompt-engineering-patterns` | Master advanced prompt engineering techniques to maximize LLM performance, reliability, and controllability in production. Use when optimizing prompts, improving LLM outputs, or designing production prompt templates. | user | `/home/manuel/.agents/skills/prompt-engineering-patterns/SKILL.md` |
| `protocol-reverse-engineering` | Master network protocol reverse engineering including packet analysis, protocol dissection, and custom protocol documentation. Use when analyzing network traffic, understanding proprietary protocols, or debugging network communication. | user | `/home/manuel/.agents/skills/protocol-reverse-engineering/SKILL.md` |
| `python-anti-patterns` | Common Python anti-patterns to avoid. Use as a checklist when reviewing code, before finalizing implementations, or when debugging issues that might stem from known bad practices. | user | `/home/manuel/.agents/skills/python-anti-patterns/SKILL.md` |
| `python-background-jobs` | Python background job patterns including task queues, workers, and event-driven architecture. Use when implementing async task processing, job queues, long-running operations, or decoupling work from request/response cycles. | user | `/home/manuel/.agents/skills/python-background-jobs/SKILL.md` |
| `python-code-style` | Python code style, linting, formatting, naming conventions, and documentation standards. Use when writing new code, reviewing style, configuring linters, writing docstrings, or establishing project standards. | user | `/home/manuel/.agents/skills/python-code-style/SKILL.md` |
| `python-configuration` | Python configuration management via environment variables and typed settings. Use when externalizing config, setting up pydantic-settings, managing secrets, or implementing environment-specific behavior. | user | `/home/manuel/.agents/skills/python-configuration/SKILL.md` |
| `python-design-patterns` | Python design patterns including KISS, Separation of Concerns, Single Responsibility, and composition over inheritance. Use when making architecture decisions, refactoring code structure, or evaluating when abstractions are appropriate. | user | `/home/manuel/.agents/skills/python-design-patterns/SKILL.md` |
| `python-error-handling` | Python error handling patterns including input validation, exception hierarchies, and partial failure handling. Use when implementing validation logic, designing exception strategies, handling batch processing failures, or building robust APIs. | user | `/home/manuel/.agents/skills/python-error-handling/SKILL.md` |
| `python-observability` | Python observability patterns including structured logging, metrics, and distributed tracing. Use when adding logging, implementing metrics collection, setting up tracing, or debugging production systems. | user | `/home/manuel/.agents/skills/python-observability/SKILL.md` |
| `python-packaging` | Create distributable Python packages with proper project structure, setup.py/pyproject.toml, and publishing to PyPI. Use when packaging Python libraries, creating CLI tools, or distributing Python code. | user | `/home/manuel/.agents/skills/python-packaging/SKILL.md` |
| `python-performance-optimization` | Profile and optimize Python code using cProfile, memory profilers, and performance best practices. Use when debugging slow Python code, optimizing bottlenecks, or improving application performance. | user | `/home/manuel/.agents/skills/python-performance-optimization/SKILL.md` |
| `python-project-structure` | Python project organization, module architecture, and public API design. Use when setting up new projects, organizing modules, defining public interfaces with __all__, or planning directory layouts. | user | `/home/manuel/.agents/skills/python-project-structure/SKILL.md` |
| `python-resilience` | Python resilience patterns including automatic retries, exponential backoff, timeouts, and fault-tolerant decorators. Use when adding retry logic, implementing timeouts, building fault-tolerant services, or handling transient failures. | user | `/home/manuel/.agents/skills/python-resilience/SKILL.md` |
| `python-resource-management` | Python resource management with context managers, cleanup patterns, and streaming. Use when managing connections, file handles, implementing cleanup logic, or building streaming responses with accumulated state. | user | `/home/manuel/.agents/skills/python-resource-management/SKILL.md` |
| `python-testing-patterns` | Implement comprehensive testing strategies with pytest, fixtures, mocking, and test-driven development. Use when writing Python tests, setting up test suites, or implementing testing best practices. | user | `/home/manuel/.agents/skills/python-testing-patterns/SKILL.md` |
| `python-type-safety` | Python type safety with type hints, generics, protocols, and strict type checking. Use when adding type annotations, implementing generic classes, defining structural interfaces, or configuring mypy/pyright. | user | `/home/manuel/.agents/skills/python-type-safety/SKILL.md` |
| `rag-implementation` | Build Retrieval-Augmented Generation (RAG) systems for LLM applications with vector databases and semantic search. Use when implementing knowledge-grounded AI, building document Q&A systems, or integrating LLMs with external knowledge bases. | user | `/home/manuel/.agents/skills/rag-implementation/SKILL.md` |
| `rdd-defect-workflow` | Trigger: RDD, receipt-driven development, review authority, receipt/lineage, correction/recovery, delivery gate/kill switch, bounded review defects. Guide work. | user | `/home/manuel/.agents/skills/rdd-defect-workflow/SKILL.md` |
| `react-modernization` | Upgrade React applications to latest versions, migrate from class components to hooks, and adopt concurrent features. Use when modernizing React codebases, migrating to React Hooks, or upgrading to latest React versions. | user | `/home/manuel/.agents/skills/react-modernization/SKILL.md` |
| `react-native-architecture` | Build production React Native apps with Expo, navigation, native modules, offline sync, and cross-platform patterns. Use when developing mobile apps, implementing native integrations, or architecting React Native projects. | user | `/home/manuel/.agents/skills/react-native-architecture/SKILL.md` |
| `react-native-design` | Master React Native styling, navigation, and Reanimated animations for cross-platform mobile development. Use when building React Native apps, implementing navigation patterns, or creating performant animations. | user | `/home/manuel/.agents/skills/react-native-design/SKILL.md` |
| `react-state-management` | Master modern React state management with Redux Toolkit, Zustand, Jotai, and React Query. Use when setting up global state, managing server state, or choosing between state management solutions. | user | `/home/manuel/.agents/skills/react-state-management/SKILL.md` |
| `receiving-code-review` | Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation | user | `/home/manuel/.agents/skills/receiving-code-review/SKILL.md` |
| `remotion-best-practices` | Best practices for Remotion - Video creation in React | user | `/home/manuel/.pi/agent/skills/remotion-best-practices/SKILL.md` |
| `remotion-to-hyperframes` | Translate an existing Remotion (React-based) video composition into a HyperFrames HTML composition. Use ONLY when the user explicitly asks to port, convert, migrate, translate, or rewrite a Remotion composition as HyperFrames — for example "port my Remotion project to HyperFrames", "convert this Remotion code to HyperFrames", "migrate from Remotion", "translate this Remotion comp", or "rewrite this as HyperFrames HTML". Do NOT use when (a) the user is authoring a NEW HyperFrames composition, even if they have or are A/B-testing a similar Remotion video; (b) the user mentions Remotion in passing without asking for migration; (c) the user shares Remotion code as reference material rather than asking for a translation; (d) the user asks for "the same video as my Remotion one" without explicitly asking to migrate the source — treat that as a fresh HyperFrames build. When in doubt, default to authoring a native HyperFrames composition with the `hyperframes` skill instead. Skill detects unsupported patterns (useState, useEffect with side effects, async calculateMetadata, third-party React component libraries, `@remotion/lambda` features) and recommends the runtime interop escape hatch instead of attempting a lossy translation. | user | `/home/manuel/.pi/agent/skills/remotion-to-hyperframes/SKILL.md` |
| `report-writing` | Bug bounty report writing for H1/Bugcrowd/Intigriti/Immunefi — report templates, human tone guidelines, impact-first writing, CVSS 3.1 scoring, title formula, impact statement formula, severity decision guide, downgrade counters, pre-submit checklist. Use after validating a finding and before submitting. Never use "could potentially" — prove it or don't report. | user | `/home/manuel/.claude/skills/report-writing/SKILL.md` |
| `requesting-code-review` | Use when completing tasks, implementing major features, or before merging to verify work meets requirements | user | `/home/manuel/.agents/skills/requesting-code-review/SKILL.md` |
| `responsive-design` | Implement modern responsive layouts using container queries, fluid typography, CSS Grid, and mobile-first breakpoint strategies. Use when building adaptive interfaces, implementing fluid layouts, or creating component-level responsive behavior. | user | `/home/manuel/.agents/skills/responsive-design/SKILL.md` |
| `risk-metrics-calculation` | Calculate portfolio risk metrics including VaR, CVaR, Sharpe, Sortino, and drawdown analysis. Use when measuring portfolio risk, implementing risk limits, or building risk monitoring systems. | user | `/home/manuel/.agents/skills/risk-metrics-calculation/SKILL.md` |
| `rust-async-patterns` | Master Rust async programming with Tokio, async traits, error handling, and concurrent patterns. Use when building async Rust applications, implementing concurrent systems, or debugging async code. | user | `/home/manuel/.agents/skills/rust-async-patterns/SKILL.md` |
| `rust-audit-prep` | Prepare Solana/Rust projects for a security audit — test coverage analysis, Rust doc-comment checks, code hygiene sweeps, dependency health verification, compute-unit optimization tips, and best-practice enforcement. Supports both Anchor-based and native solana_program Rust programs. Generates a scored Audit Readiness Report. Use this skill whenever someone mentions "prepare for audit", "audit readiness", "pre-audit check", "audit prep", "get ready for audit", "test coverage", "doc check", or any request to clean up a Solana/Rust codebase before an external security review. Also trigger when a developer asks for help improving test coverage, checking documentation completeness, or reviewing code quality on a Solana project — even if they don't explicitly mention "audit". Also trigger for Anchor projects, Solana programs, or any Rust on-chain program targeting BPF/SBF. | user | `/home/manuel/.claude/skills/rust-audit-prep/SKILL.md` |
| `saga-orchestration` | Implement saga patterns for distributed transactions and cross-aggregate workflows. Use when coordinating multi-step business processes, handling compensating transactions, or managing long-running workflows. | user | `/home/manuel/.agents/skills/saga-orchestration/SKILL.md` |
| `sast-configuration` | Configure Static Application Security Testing (SAST) tools for automated vulnerability detection in application code. Use when setting up security scanning, implementing DevSecOps practices, or automating code vulnerability detection. | user | `/home/manuel/.agents/skills/sast-configuration/SKILL.md` |
| `screen-reader-testing` | Test web applications with screen readers including VoiceOver, NVDA, and JAWS. Use when validating screen reader compatibility, debugging accessibility issues, or ensuring assistive technology support. | user | `/home/manuel/.agents/skills/screen-reader-testing/SKILL.md` |
| `secrets-management` | Implement secure secrets management for CI/CD pipelines using Vault, AWS Secrets Manager, or native platform solutions. Use when handling sensitive credentials, rotating secrets, or securing CI/CD environments. | user | `/home/manuel/.agents/skills/secrets-management/SKILL.md` |
| `security-arsenal` | Security payloads, bypass tables, wordlists, gf pattern names, always-rejected bug list, and conditionally-valid-with-chain table. Use when you need specific payloads for XSS/SSRF/SQLi/XXE/NoSQLi/command injection/SSTI/IDOR/path-traversal/HTTP smuggling/WebSocket/MFA bypass, bypass techniques, or to check if a finding is submittable. Also use when asked about what NOT to submit. | user | `/home/manuel/.claude/skills/security-arsenal/SKILL.md` |
| `security-code-review-agent` | — | user | `/home/manuel/.config/opencode/skills/security-code-review-agent/SKILL.md` |
| `security-requirement-extraction` | Derive security requirements from threat models and business context. Use when translating threats into actionable requirements, creating security user stories, or building security test cases. | user | `/home/manuel/.agents/skills/security-requirement-extraction/SKILL.md` |
| `seo` | Comprehensive SEO analysis for any website or business type. Full site audits, single-page analysis, technical SEO (crawlability, indexability, Core Web Vitals with INP), schema markup, content quality (E-E-A-T), image optimization, sitemap analysis, and GEO for AI Overviews/ChatGPT/Perplexity. Industry detection for SaaS, e-commerce, local, publishers, agencies. Triggers on: SEO, audit, schema, Core Web Vitals, sitemap, E-E-A-T, AI Overviews, GEO, technical SEO, content quality, page speed, structured data. | user | `/home/manuel/.claude/skills/seo/SKILL.md` |
| `seo-ahrefs` | Ahrefs API analyst (extension). Reads referring domains, backlinks, organic keywords, and content explorer data via the official @ahrefs/mcp@0.0.11 server. Pairs with seo-backlinks for multi-source confidence weighting. | user | `/home/manuel/.claude/skills/seo-ahrefs/SKILL.md` |
| `seo-audit` | Full website SEO audit with parallel subagent delegation. Crawls up to 500 pages, detects business type, delegates to up to 15 specialists (8 always + 7 conditional), generates health score. Use when user says audit, full SEO check, analyze my site, or website health check. | user | `/home/manuel/.claude/skills/seo-audit/SKILL.md` |
| `seo-backlinks` | Backlink profile analysis: referring domains, anchor text distribution, toxic link detection, competitor gap analysis. Works with free APIs (Moz, Bing Webmaster, Common Crawl) and DataForSEO extension. Use when user says backlinks, link profile, referring domains, anchor text, toxic links, link gap, link building, disavow, or backlink audit. | user | `/home/manuel/.claude/skills/seo-backlinks/SKILL.md` |
| `seo-bing` | Bing Webmaster Tools + IndexNow extension. Microsoft Copilot citations are fed by the Bing index; this skill makes Bing visibility, link data, and IndexNow URL submission first-class. | user | `/home/manuel/.claude/skills/seo-bing/SKILL.md` |
| `seo-cluster` | SERP-based semantic topic clustering for content architecture planning. Groups keywords by actual Google SERP overlap (not text similarity), designs hub-and-spoke content clusters with internal link matrices, and generates interactive visualizations. Optionally executes content creation if claude-blog is installed. Use when user says "topic cluster", "content cluster", "semantic clustering", "pillar page", "hub and spoke", "content architecture", "keyword grouping", or "cluster plan". | user | `/home/manuel/.claude/skills/seo-cluster/SKILL.md` |
| `seo-competitor-pages` | Generate SEO-optimized competitor comparison and alternatives pages. Covers "X vs Y" layouts, "alternatives to X" pages, feature matrices, schema markup, and conversion optimization. Use when user says "comparison page", "vs page", "alternatives page", "competitor comparison", "X vs Y", "versus", "compare competitors", or "alternative to". | user | `/home/manuel/.claude/skills/seo-competitor-pages/SKILL.md` |
| `seo-content` | Content quality and E-E-A-T analysis with AI citation readiness assessment. Use when user says "content quality", "E-E-A-T", "content analysis", "readability check", "thin content", or "content audit". | user | `/home/manuel/.claude/skills/seo-content/SKILL.md` |
| `seo-content-brief` | Generate competitive SEO content briefs with per-section word counts, competitor scoring, keyword density guidance, and page-type templates. Supports both new page briefs and improve-existing-page briefs. Use when user says "content brief", "write a brief", "content outline", "blog brief", "service page brief", "brief for", "writing brief", "content plan", or "outline for". | user | `/home/manuel/.claude/skills/seo-content-brief/SKILL.md` |
| `seo-dataforseo` | Live SEO data via DataForSEO MCP server. SERP analysis (Google, Bing, Yahoo, YouTube, Google Images), keyword research (volume, difficulty, intent, trends), backlink profiles, on-page analysis (Lighthouse, content parsing), competitor analysis, content analysis, business listings, AI visibility (ChatGPT scraper, LLM mention tracking), and domain analytics. Requires DataForSEO extension installed. Use when user says "dataforseo", "live SERP", "keyword volume", "backlink data", "competitor data", "AI visibility check", "LLM mentions", "image SERP", "google images", "image rankings", or "real search data". | user | `/home/manuel/.claude/skills/seo-dataforseo/SKILL.md` |
| `seo-drift` | SEO drift monitoring: capture baselines of SEO-critical elements, detect changes, and track regressions over time. Git for SEO — baseline, diff, and track changes to your on-page SEO. Use when user says "SEO drift", "baseline", "track changes", "did anything break", "SEO regression", "compare SEO", "before and after", "monitor SEO changes", or "deployment check". | user | `/home/manuel/.claude/skills/seo-drift/SKILL.md` |
| `seo-ecommerce` | E-commerce SEO analysis: Google Shopping visibility, Amazon marketplace intelligence, product schema validation, competitor pricing analysis, and marketplace keyword gaps. Combines on-page product SEO with marketplace data from DataForSEO Merchant API. Use when user says "ecommerce SEO", "product SEO", "Google Shopping", "marketplace SEO", "product schema", "Amazon SEO", "product listings", "shopping ads", or "merchant SEO". | user | `/home/manuel/.claude/skills/seo-ecommerce/SKILL.md` |
| `seo-firecrawl` | Full-site crawling, scraping, and site mapping via Firecrawl MCP. Use when user says "crawl site", "map site", "full crawl", "find all pages", "broken links", "site structure", "discover pages", "JS rendering", or needs site-wide analysis. | user | `/home/manuel/.claude/skills/seo-firecrawl/SKILL.md` |
| `seo-flow` | FLOW framework integration — evidence-led SEO using the Find → Leverage → Optimize → Win loop. Surfaces stage-specific AI prompts from the FLOW knowledge base (41 prompts, CC BY 4.0). Use when user says "FLOW", "FLOW framework", "seo flow", "evidence-led SEO", "find leverage optimize win", or wants stage-specific SEO prompts. | user | `/home/manuel/.claude/skills/seo-flow/SKILL.md` |
| `seo-geo` | Optimize content for AI Overviews (formerly SGE), ChatGPT web search, Perplexity, and other AI-powered search experiences. Generative Engine Optimization (GEO) analysis including brand mention signals, AI crawler accessibility, llms.txt compliance, passage-level citability scoring, and platform-specific optimization. Use when user says "AI Overviews", "SGE", "GEO", "AI search", "LLM optimization", "Perplexity", "AI citations", "ChatGPT search", or "AI visibility". | user | `/home/manuel/.claude/skills/seo-geo/SKILL.md` |
| `seo-google` | Google SEO APIs: Search Console (Search Analytics, URL Inspection, Sitemaps), PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3, and GA4 organic traffic. Provides real Google field data for Core Web Vitals, indexation status, search performance, and organic traffic trends. Use when user says "search console", "GSC", "PageSpeed", "CrUX", "field data", "indexing API", "GA4 organic", "URL inspection", "google api setup", "real CWV data", "impressions", "clicks", "CTR", "position data", "LCP", "INP", "CLS", "FCP", "TTFB", or "Lighthouse scores". | user | `/home/manuel/.claude/skills/seo-google/SKILL.md` |
| `seo-hreflang` | Hreflang and international SEO audit, validation, and generation. Detects common mistakes, validates language/region codes, and generates correct hreflang implementations. Use when user says "hreflang", "i18n SEO", "international SEO", "multi-language", "multi-region", or "language tags". | user | `/home/manuel/.claude/skills/seo-hreflang/SKILL.md` |
| `seo-image-gen` | AI image generation for SEO assets: OG/social preview images, blog hero images, schema images, product photography, infographics. Powered by Gemini via nanobanana-mcp. Requires banana extension installed. Use when user says \"generate image\", \"OG image\", \"social preview\", \"hero image\", \"blog image\", \"product photo\", \"infographic\", \"seo image\", \"create visual\", \"image-gen\", \"favicon\", \"schema image\", \"pinterest pin\", \"generate visual\", \"banner\", or \"thumbnail\". | user | `/home/manuel/.claude/skills/seo-image-gen/SKILL.md` |
| `seo-images` | Image optimization analysis for SEO and performance. Checks alt text, file sizes, formats, responsive images, lazy loading, CLS prevention, image SERP rankings (via DataForSEO), and image file optimization (WebP/AVIF conversion, IPTC/XMP metadata injection). Use when user says "image optimization", "alt text", "image SEO", "image size", "image audit", "optimize images", "image metadata", "image SERP", "convert to webp", or "image file optimize". | user | `/home/manuel/.claude/skills/seo-images/SKILL.md` |
| `seo-local` | Local SEO analysis covering Google Business Profile optimization, NAP consistency, citation health, review signals, local schema markup, location page quality, multi-location SEO, and industry-specific recommendations. Detects business type (brick-and-mortar, SAB, hybrid) and industry vertical (restaurant, healthcare, legal, home services, real estate, automotive). Use when user says "local SEO", "Google Business Profile", "GBP", "map pack", "local pack", "citations", "NAP consistency", "local rankings", "service area", "multi-location", or "local search". | user | `/home/manuel/.claude/skills/seo-local/SKILL.md` |
| `seo-maps` | Maps intelligence for local SEO — geo-grid rank tracking, GBP profile auditing via API, review intelligence across Google/Tripadvisor/Trustpilot, cross-platform NAP verification (Google/Bing/Apple/OSM), competitor radius mapping, and LocalBusiness schema generation from API data. Three-tier capability: free (Overpass + Geoapify), DataForSEO (full intelligence), DataForSEO + Google (maximum coverage). Use when user says "maps", "geo-grid", "rank tracking", "GBP audit", "review velocity", "competitor radius", "maps analysis", "local rank tracking", "Share of Local Voice", or "SoLV". | user | `/home/manuel/.claude/skills/seo-maps/SKILL.md` |
| `seo-page` | Deep single-page SEO analysis covering on-page elements, content quality, technical meta tags, schema, images, and performance. Use when user says "analyze this page", "check page SEO", "single URL", "check this page", "page analysis", or provides a single URL for review. | user | `/home/manuel/.claude/skills/seo-page/SKILL.md` |
| `seo-plan` | Strategic SEO planning for new or existing websites. Industry-specific templates, competitive analysis, content strategy, and implementation roadmap. Use when user says "SEO plan", "SEO strategy", "SEO planning", "content strategy", "keyword strategy", "content calendar", "site architecture", or "SEO roadmap". | user | `/home/manuel/.claude/skills/seo-plan/SKILL.md` |
| `seo-profound` | Profound LLM citation tracker (extension). Time-series brand citation rates across ChatGPT, Perplexity, and other LLMs. Pairs with seo-seranking for triangulated AI visibility coverage. | user | `/home/manuel/.claude/skills/seo-profound/SKILL.md` |
| `seo-programmatic` | Programmatic SEO planning and analysis for pages generated at scale from data sources. Covers template engines, URL patterns, internal linking automation, thin content safeguards, and index bloat prevention. Use when user says "programmatic SEO", "pages at scale", "dynamic pages", "template pages", "generated pages", or "data-driven SEO". | user | `/home/manuel/.claude/skills/seo-programmatic/SKILL.md` |
| `seo-schema` | Detect, validate, and generate Schema.org structured data. JSON-LD format preferred. Use when user says "schema", "structured data", "rich results", "JSON-LD", or "markup". | user | `/home/manuel/.claude/skills/seo-schema/SKILL.md` |
| `seo-seranking` | SE Ranking AI visibility analyst (extension). Tracks AI Share-of-Voice across ChatGPT, Gemini, Perplexity, AI Overviews, and AI Mode in a single query. Highest-impact new extension per the v2 gap analysis — no other vendor covers all 5 AI platforms in one API. | user | `/home/manuel/.claude/skills/seo-seranking/SKILL.md` |
| `seo-sitemap` | Analyze existing XML sitemaps or generate new ones with industry templates. Validates format, URLs, and structure. Use when user says "sitemap", "generate sitemap", "sitemap issues", or "XML sitemap". | user | `/home/manuel/.claude/skills/seo-sitemap/SKILL.md` |
| `seo-sxo` | Search Experience Optimization: reads Google SERPs backwards to detect page-type mismatches, derives user stories from search intent signals, and scores pages from multiple persona perspectives. Identifies why well-optimized pages fail to rank by analyzing what Google rewards for each keyword. Use when user says "SXO", "search experience", "page type mismatch", "SERP analysis", "user story", "persona scoring", "why isn't my page ranking", "intent mismatch", or "wireframe". | user | `/home/manuel/.claude/skills/seo-sxo/SKILL.md` |
| `seo-technical` | Technical SEO audit across 9 categories: crawlability, indexability, security, URL structure, mobile, Core Web Vitals, structured data, JavaScript rendering, and IndexNow protocol. Use when user says "technical SEO", "crawl issues", "robots.txt", "Core Web Vitals", "site speed", or "security headers". | user | `/home/manuel/.claude/skills/seo-technical/SKILL.md` |
| `seo-unlighthouse` | Multi-page Lighthouse audit via the MIT-licensed Unlighthouse CLI. Free-tier alternative to running PageSpeed against every URL on a site — no API quota burn, runs locally. | user | `/home/manuel/.claude/skills/seo-unlighthouse/SKILL.md` |
| `service-mesh-observability` | Implement comprehensive observability for service meshes including distributed tracing, metrics, and visualization. Use when setting up mesh monitoring, debugging latency issues, or implementing SLOs for service communication. | user | `/home/manuel/.agents/skills/service-mesh-observability/SKILL.md` |
| `shellcheck-configuration` | Master ShellCheck static analysis configuration and usage for shell script quality. Use when setting up linting infrastructure, fixing code issues, or ensuring script portability. | user | `/home/manuel/.agents/skills/shellcheck-configuration/SKILL.md` |
| `similarity-search-patterns` | Implement efficient similarity search with vector databases. Use when building semantic search, implementing nearest neighbor queries, or optimizing retrieval performance. | user | `/home/manuel/.agents/skills/similarity-search-patterns/SKILL.md` |
| `skill-creator` | Trigger: new skills, agent instructions, documenting AI usage patterns. Create LLM-first skills with valid frontmatter. | user | `/home/manuel/.agents/skills/skill-creator/SKILL.md` |
| `skill-improver` | Trigger: improve skills, audit skills, refactor skills, skill quality. Audit and upgrade existing LLM-first skills. | user | `/home/manuel/.agents/skills/skill-improver/SKILL.md` |
| `skill-repair` | Use this to fix and re-install agent skills that have failed installation. This skill provides the necessary context and permissions to surgically update the `manifest.json` after a fix has been applied. | user | `/home/manuel/.gemini/skills/skill-repair/SKILL.md` |
| `slo-implementation` | Define and implement Service Level Indicators (SLIs) and Service Level Objectives (SLOs) with error budgets and alerting. Use when establishing reliability targets, implementing SRE practices, or measuring service performance. | user | `/home/manuel/.agents/skills/slo-implementation/SKILL.md` |
| `solidity-auditor` | Security audit of Solidity code while you develop. Trigger on "audit", "check this contract", "review for security". Modes - default (full repo) or a specific filename. | user | `/home/manuel/.pi/agent/skills/solidity-auditor/SKILL.md` |
| `solidity-security` | Master smart contract security best practices to prevent common vulnerabilities and implement secure Solidity patterns. Use when writing smart contracts, auditing existing contracts, or implementing security measures for blockchain applications. | user | `/home/manuel/.agents/skills/solidity-security/SKILL.md` |
| `sora` | Use when the user asks to generate, remix, poll, list, download, or delete Sora videos via OpenAI\u2019s video API using the bundled CLI (`scripts/sora.py`), including requests like \u201cgenerate AI video,\u201d \u201cSora,\u201d \u201cvideo remix,\u201d \u201cdownload video/thumbnail/spritesheet,\u201d and batch video generation; requires `OPENAI_API_KEY` and Sora API access. | user | `/home/manuel/.codex/skills/sora/SKILL.md` |
| `spark-optimization` | Optimize Apache Spark jobs with partitioning, caching, shuffle optimization, and memory tuning. Use when improving Spark performance, debugging slow jobs, or scaling data processing pipelines. | user | `/home/manuel/.agents/skills/spark-optimization/SKILL.md` |
| `sql-optimization-patterns` | Master SQL query optimization, indexing strategies, and EXPLAIN analysis to dramatically improve database performance and eliminate slow queries. Use when debugging slow queries, designing database schemas, or optimizing application performance. | user | `/home/manuel/.agents/skills/sql-optimization-patterns/SKILL.md` |
| `startup-financial-modeling` | This skill should be used when the user asks to "create financial projections", "build a financial model", "forecast revenue", "calculate burn rate", "estimate runway", "model cash flow", or requests 3-5 year financial planning for a startup. | user | `/home/manuel/.agents/skills/startup-financial-modeling/SKILL.md` |
| `startup-metrics-framework` | This skill should be used when the user asks about "key startup metrics", "SaaS metrics", "CAC and LTV", "unit economics", "burn multiple", "rule of 40", "marketplace metrics", or requests guidance on tracking and optimizing business performance metrics. | user | `/home/manuel/.agents/skills/startup-metrics-framework/SKILL.md` |
| `stride-analysis-patterns` | Apply STRIDE methodology to systematically identify threats. Use when analyzing system security, conducting threat modeling sessions, or creating security documentation. | user | `/home/manuel/.agents/skills/stride-analysis-patterns/SKILL.md` |
| `stripe-integration` | Implement Stripe payment processing for robust, PCI-compliant payment flows including checkout, subscriptions, and webhooks. Use when integrating Stripe payments, building subscription systems, or implementing secure checkout flows. | user | `/home/manuel/.agents/skills/stripe-integration/SKILL.md` |
| `subagent-driven-development` | Use when executing implementation plans with independent tasks in the current session | user | `/home/manuel/.agents/skills/subagent-driven-development/SKILL.md` |
| `systematic-debugging` | Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes | user | `/home/manuel/.agents/skills/systematic-debugging/SKILL.md` |
| `systemic-issue-triage` | Trigger: new issue, bug report, triage, backlog, issue flood, community report, root cause, dead-end, blocked user. Attack issues by root class, never one-by-one; fixes must shrink the system, not grow it. | user | `/home/manuel/.agents/skills/systemic-issue-triage/SKILL.md` |
| `tailwind` | Tailwind CSS v4.2 browser-runtime patterns for HyperFrames compositions. Use when scaffolding or editing projects created with `hyperframes init --tailwind`, writing Tailwind utility classes in composition HTML, adding CSS-first Tailwind v4 theme tokens, debugging v3 vs v4 syntax, or deciding when to compile Tailwind to CSS instead of using the browser runtime. | user | `/home/manuel/.pi/agent/skills/tailwind/SKILL.md` |
| `tailwind-design-system` | Build scalable design systems with Tailwind CSS v4, design tokens, component libraries, and responsive patterns. Use when creating component libraries, implementing design systems, or standardizing UI patterns. | user | `/home/manuel/.agents/skills/tailwind-design-system/SKILL.md` |
| `task-coordination-strategies` | Decompose complex tasks, design dependency graphs, and coordinate multi-agent work with proper task descriptions and workload balancing. Use this skill when breaking down work for agent teams, managing task dependencies, or monitoring team progress. | user | `/home/manuel/.agents/skills/task-coordination-strategies/SKILL.md` |
| `team-communication-protocols` | Structured messaging protocols for agent team communication including message type selection, plan approval, shutdown procedures, and anti-patterns to avoid. Use this skill when establishing team communication norms, handling plan approvals, or managing team shutdown. | user | `/home/manuel/.agents/skills/team-communication-protocols/SKILL.md` |
| `team-composition-analysis` | This skill should be used when the user asks to "plan team structure", "determine hiring needs", "design org chart", "calculate compensation", "plan equity allocation", or requests organizational design and headcount planning for a startup. | user | `/home/manuel/.agents/skills/team-composition-analysis/SKILL.md` |
| `team-composition-patterns` | Design optimal agent team compositions with sizing heuristics, preset configurations, and agent type selection. Use this skill when deciding team size, selecting agent types, or configuring team presets for multi-agent workflows. | user | `/home/manuel/.agents/skills/team-composition-patterns/SKILL.md` |
| `temporal-python-testing` | Test Temporal workflows with pytest, time-skipping, and mocking strategies. Covers unit testing, integration testing, replay testing, and local development setup. Use when implementing Temporal workflow tests or debugging test failures. | user | `/home/manuel/.agents/skills/temporal-python-testing/SKILL.md` |
| `terraform-module-library` | Build reusable Terraform modules for AWS, Azure, and GCP infrastructure following infrastructure-as-code best practices. Use when creating infrastructure modules, standardizing cloud provisioning, or implementing reusable IaC components. | user | `/home/manuel/.agents/skills/terraform-module-library/SKILL.md` |
| `test-driven-development` | Use when implementing any feature or bugfix, before writing implementation code | user | `/home/manuel/.agents/skills/test-driven-development/SKILL.md` |
| `testing-api-authentication-weaknesses` | Tests API authentication mechanisms for weaknesses including broken | user | `/home/manuel/.claude/skills/testing-api-authentication-weaknesses/SKILL.md` |
| `testing-api-for-broken-object-level-authorization` | Tests REST and GraphQL APIs for Broken Object Level Authorization (BOLA/IDOR) | user | `/home/manuel/.claude/skills/testing-api-for-broken-object-level-authorization/SKILL.md` |
| `testing-api-for-mass-assignment-vulnerability` | Tests APIs for mass assignment (auto-binding) vulnerabilities where | user | `/home/manuel/.claude/skills/testing-api-for-mass-assignment-vulnerability/SKILL.md` |
| `testing-api-security-with-owasp-top-10` | Systematically assessing REST and GraphQL API endpoints against the OWASP | user | `/home/manuel/.claude/skills/testing-api-security-with-owasp-top-10/SKILL.md` |
| `testing-cors-misconfiguration` | Identifying and exploiting Cross-Origin Resource Sharing misconfigurations | user | `/home/manuel/.claude/skills/testing-cors-misconfiguration/SKILL.md` |
| `testing-for-broken-access-control` | Systematically testing web applications for broken access control vulnerabilities | user | `/home/manuel/.claude/skills/testing-for-broken-access-control/SKILL.md` |
| `testing-for-host-header-injection` | Test web applications for HTTP Host header injection vulnerabilities | user | `/home/manuel/.claude/skills/testing-for-host-header-injection/SKILL.md` |
| `testing-for-json-web-token-vulnerabilities` | Test JWT implementations for critical vulnerabilities including algorithm | user | `/home/manuel/.claude/skills/testing-for-json-web-token-vulnerabilities/SKILL.md` |
| `testing-for-xml-injection-vulnerabilities` | Test web applications for XML injection vulnerabilities including XXE, | user | `/home/manuel/.claude/skills/testing-for-xml-injection-vulnerabilities/SKILL.md` |
| `testing-for-xss-vulnerabilities` | Tests web applications for Cross-Site Scripting (XSS) vulnerabilities | user | `/home/manuel/.claude/skills/testing-for-xss-vulnerabilities/SKILL.md` |
| `testing-for-xss-vulnerabilities-with-burpsuite` | Identifying and validating cross-site scripting vulnerabilities using | user | `/home/manuel/.claude/skills/testing-for-xss-vulnerabilities-with-burpsuite/SKILL.md` |
| `testing-for-xxe-injection-vulnerabilities` | Discovering and exploiting XML External Entity injection vulnerabilities | user | `/home/manuel/.claude/skills/testing-for-xxe-injection-vulnerabilities/SKILL.md` |
| `testing-jwt-token-security` | Assessing JSON Web Token implementations for cryptographic weaknesses, | user | `/home/manuel/.claude/skills/testing-jwt-token-security/SKILL.md` |
| `testing-mobile-api-authentication` | Tests authentication and authorization mechanisms in mobile application | user | `/home/manuel/.claude/skills/testing-mobile-api-authentication/SKILL.md` |
| `testing-oauth2-implementation-flaws` | Tests OAuth 2.0 and OpenID Connect implementations for security flaws | user | `/home/manuel/.claude/skills/testing-oauth2-implementation-flaws/SKILL.md` |
| `testing-websocket-api-security` | Tests WebSocket API implementations for security vulnerabilities including | user | `/home/manuel/.claude/skills/testing-websocket-api-security/SKILL.md` |
| `threat-mitigation-mapping` | Map identified threats to appropriate security controls and mitigations. Use when prioritizing security investments, creating remediation plans, or validating control effectiveness. | user | `/home/manuel/.agents/skills/threat-mitigation-mapping/SKILL.md` |
| `three` | Three.js and WebGL adapter patterns for HyperFrames. Use when creating deterministic Three.js scenes, WebGL canvas layers, AnimationMixer timelines, camera motion, shader-driven visuals, or canvas renders that respond to HyperFrames hf-seek events. | user | `/home/manuel/.pi/agent/skills/three/SKILL.md` |
| `track-management` | Use this skill when creating, managing, or working with Conductor tracks - the logical work units for features, bugs, and refactors. Applies to spec.md, plan.md, and track lifecycle operations. | user | `/home/manuel/.agents/skills/track-management/SKILL.md` |
| `triage-validation` | Finding validation before writing any report — 7-Question Gate (all 7 questions), 4 pre-submission gates, always-rejected list, conditionally valid with chain table, CVSS 3.1 quick reference, severity decision guide, report title formula, 60-second pre-submit checklist. Use BEFORE writing any report. One wrong answer = kill the finding and move on. Saves N/A ratio. | user | `/home/manuel/.claude/skills/triage-validation/SKILL.md` |
| `turborepo-caching` | Configure Turborepo for efficient monorepo builds with local and remote caching. Use when setting up Turborepo, optimizing build pipelines, or implementing distributed caching. | user | `/home/manuel/.agents/skills/turborepo-caching/SKILL.md` |
| `typescript-advanced-types` | Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications. Use when implementing complex type logic, creating reusable type utilities, or ensuring compile-time type safety in TypeScript projects. | user | `/home/manuel/.agents/skills/typescript-advanced-types/SKILL.md` |
| `unity-ecs-patterns` | Master Unity ECS (Entity Component System) with DOTS, Jobs, and Burst for high-performance game development. Use when building data-oriented games, optimizing performance, or working with large entity counts. | user | `/home/manuel/.agents/skills/unity-ecs-patterns/SKILL.md` |
| `using-git-worktrees` | Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification | user | `/home/manuel/.agents/skills/using-git-worktrees/SKILL.md` |
| `using-superpowers` | Use when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions | user | `/home/manuel/.agents/skills/using-superpowers/SKILL.md` |
| `uv-package-manager` | Master the uv package manager for fast Python dependency management, virtual environments, and modern Python project workflows. Use when setting up Python projects, managing dependencies, or optimizing Python development workflows with uv. | user | `/home/manuel/.agents/skills/uv-package-manager/SKILL.md` |
| `vector-index-tuning` | Optimize vector index performance for latency, recall, and memory. Use when tuning HNSW parameters, selecting quantization strategies, or scaling vector search infrastructure. | user | `/home/manuel/.agents/skills/vector-index-tuning/SKILL.md` |
| `vercel-react-best-practices` | React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements. | user | `/home/manuel/.agents/skills/vercel-react-best-practices/SKILL.md` |
| `verification-before-completion` | Use when about to claim work is complete, fixed, or passing, before committing or creating PRs - requires running verification commands and confirming output before making any success claims; evidence before assertions always | user | `/home/manuel/.agents/skills/verification-before-completion/SKILL.md` |
| `video-download` | Download video and audio from YouTube and 1000+ sites using yt-dlp. No API keys needed. Use when: (1) Downloading a video from YouTube or other sites, (2) Extracting audio from a video URL, (3) Downloading subtitles/captions from a video, (4) Getting video metadata without downloading. | user | `/home/manuel/.pi/agent/skills/video-download/SKILL.md` |
| `video-edit` | Edit videos locally using ffmpeg. Trim, concat, resize, speed, overlay, extract audio, compress, and convert. Use when: (1) Trimming or cutting video segments, (2) Concatenating multiple clips, (3) Resizing video for social platforms, (4) Extracting or replacing audio, (5) Compressing video, (6) Converting video formats, (7) Getting video info. | user | `/home/manuel/.pi/agent/skills/video-edit/SKILL.md` |
| `video-understand` | Understand video content locally using ffmpeg frame extraction and Whisper transcription. No API keys needed. Use when: (1) Understanding what a video contains, (2) Transcribing video audio locally, (3) Extracting key frames for visual analysis, (4) Getting video content without API keys. | user | `/home/manuel/.pi/agent/skills/video-understand/SKILL.md` |
| `visual-design-foundations` | Apply typography, color theory, spacing systems, and iconography principles to create cohesive visual designs. Use when establishing design tokens, building style guides, or improving visual hierarchy and consistency. | user | `/home/manuel/.agents/skills/visual-design-foundations/SKILL.md` |
| `waapi` | Web Animations API adapter patterns for HyperFrames. Use when authoring element.animate() motion, Animation currentTime seeking, document.getAnimations(), KeyframeEffect timing, fill modes, or native browser animations that must render deterministically in HyperFrames. | user | `/home/manuel/.pi/agent/skills/waapi/SKILL.md` |
| `wcag-audit-patterns` | Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance. Use when auditing websites for accessibility, fixing WCAG violations, or implementing accessible design patterns. | user | `/home/manuel/.agents/skills/wcag-audit-patterns/SKILL.md` |
| `web-component-design` | Master React, Vue, and Svelte component patterns including CSS-in-JS, composition strategies, and reusable component architecture. Use when building UI component libraries, designing component APIs, or implementing frontend design systems. | user | `/home/manuel/.agents/skills/web-component-design/SKILL.md` |
| `web-design-guidelines` | Review UI code for Web Interface Guidelines compliance. Use when asked to "review my UI", "check accessibility", "audit design", "review UX", or "check my site against best practices". | user | `/home/manuel/.agents/skills/web-design-guidelines/SKILL.md` |
| `web2-recon` | Web2 recon pipeline — subdomain enumeration (subfinder, Chaos API, assetfinder), live host discovery (dnsx, httpx), URL crawling (katana, waybackurls, gau), directory fuzzing (ffuf), JS analysis (LinkFinder, SecretFinder), continuous monitoring (new subdomain alerts, JS change detection, GitHub commit watch). Use when starting recon on any web2 target or when asked about asset discovery, subdomain enum, or attack surface mapping. | user | `/home/manuel/.claude/skills/web2-recon/SKILL.md` |
| `web2-vuln-classes` | Complete reference for 20 web2 bug classes with root causes, detection patterns, bypass tables, exploit techniques, and real paid examples. Covers IDOR, auth bypass, XSS, SSRF (11 IP bypass techniques), SQLi, business logic, race conditions, OAuth/OIDC, file upload (10 bypass techniques), GraphQL, LLM/AI (ASI01-ASI10 agentic framework), API misconfig (mass assignment, JWT attacks, prototype pollution, CORS), ATO taxonomy (9 paths), SSTI (Jinja2/Twig/Freemarker/ERB/Spring), subdomain takeover, cloud/infra misconfigs, HTTP smuggling (CL.TE/TE.CL/H2.CL), cache poisoning, MFA bypass (7 patterns), SAML attacks (XSW/comment injection/signature stripping). Use when hunting a specific vuln class or studying what makes bugs pay. | user | `/home/manuel/.claude/skills/web2-vuln-classes/SKILL.md` |
| `web3-audit` | Smart contract security audit — 10 DeFi bug classes (accounting desync, access control, incomplete path, off-by-one, oracle, ERC4626, reentrancy, flash loan, signature replay, proxy), pre-dive kill signals (TVL < $500K etc), Foundry PoC template, grep patterns for each class, and real Immunefi paid examples. Use for any Solidity/Rust contract audit or when deciding whether a DeFi target is worth hunting. | user | `/home/manuel/.claude/skills/web3-audit/SKILL.md` |
| `web3-testing` | Test smart contracts comprehensively using Hardhat and Foundry with unit tests, integration tests, and mainnet forking. Use when testing Solidity contracts, setting up blockchain test suites, or validating DeFi protocols. | user | `/home/manuel/.agents/skills/web3-testing/SKILL.md` |
| `website-to-hyperframes` | Capture a website and create a HyperFrames video from it. Use when: (1) a user provides a URL and wants a video, (2) someone says "capture this site", "turn this into a video", "make a promo from my site", (3) the user wants a social ad, product tour, or any video based on an existing website, (4) the user shares a link and asks for any kind of video content. Even if the user just pastes a URL — this is the skill to use. | user | `/home/manuel/.pi/agent/skills/website-to-hyperframes/SKILL.md` |
| `work-unit-commits` | Plan commits as reviewable work units. Trigger: implementation, commit splitting, chained PRs, or keeping tests and docs with code. | user | `/home/manuel/.agents/skills/work-unit-commits/SKILL.md` |
| `workflow-orchestration-patterns` | Design durable workflows with Temporal for distributed systems. Covers workflow vs activity separation, saga patterns, state management, and determinism constraints. Use when building long-running processes, distributed transactions, or microservice orchestration. | user | `/home/manuel/.agents/skills/workflow-orchestration-patterns/SKILL.md` |
| `workflow-patterns` | Use this skill when implementing tasks according to Conductor's TDD workflow, handling phase checkpoints, managing git commits for tasks, or understanding the verification protocol. | user | `/home/manuel/.agents/skills/workflow-patterns/SKILL.md` |
| `writing-plans` | Use when you have a spec or requirements for a multi-step task, before touching code | user | `/home/manuel/.agents/skills/writing-plans/SKILL.md` |
| `writing-skills` | Use when creating new skills, editing existing skills, or verifying skills work before deployment | user | `/home/manuel/.agents/skills/writing-skills/SKILL.md` |
| `x-longform-post` | Write long-form X (Twitter) posts and threads in a founder/CEO voice. Use when drafting X articles, long tweets, thought leadership threads, or viral content. Produces contrarian, data-backed posts with ASCII diagrams and code block visuals. Includes mandatory AI humanizer pass (24-pattern detector) before finalizing. | user | `/home/manuel/.pi/agent/skills/x-longform-post/SKILL.md` |
| `x-ray` | Generates an x-ray.md pre-audit report covering overview, enhanced threat model (protocol-type profiling, git-weighted attack surfaces, temporal risk analysis, composability dependency mapping), invariants, integrations, docs quality, test analysis, and developer/git history. Triggers on 'x-ray', 'audit readiness', 'readiness report', 'pre-audit report', 'prep this protocol', 'protocol prep', 'summarize this protocol'. | user | `/home/manuel/.pi/agent/skills/x-ray/SKILL.md` |
| `yt-competitive-analysis` | Analyze YouTube channels for outlier videos and packaging patterns. Identifies what's working (2x+ average views) across any set of channels. Use when asked for YouTube competitive analysis, viral video patterns, or packaging/title inspiration. | user | `/home/manuel/.pi/agent/skills/yt-competitive-analysis/SKILL.md` |
## Loading protocol
1. Match task context and target files against the `Trigger / description` column.
2. Pass only the matching `Path` values to the subagent under `## Skills to load before work`.
3. Instruct the subagent to read those exact `SKILL.md` files before reading, writing, reviewing, testing, or creating artifacts.
4. If no matching skill exists, proceed without project skill injection and report `skill_resolution: none`.
@@ -0,0 +1,7 @@
[ 155ms] [ERROR] Failed to load resource: net::ERR_ADDRESS_UNREACHABLE @ https://www.googletagmanager.com/gtag/js?id=G-S8N9N15MT1:0
[ 1124ms] [LOG] %c%s color: red; background: yellow; font-size: 24px; ADVERTENCIA @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/am=AAAAACAT/d=1/excm=_b,_tp,analysisview/ed=1/dg=0/wt=2/ujg=1/rs=AJ3lrY566_pqu5VTzeRzxklJYTL-90oyeQ/dti=1/m=_b,_tp:278
[ 1124ms] [LOG] %c%s font-size: 18px; Si utilizas esta consola, otras personas podrían hacerse pasar por ti y robarte datos mediante un ataque llamado Self-XSS.
No escribas ni pegues ningún código que no entiendas. @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/am=AAAAACAT/d=1/excm=_b,_tp,analysisview/ed=1/dg=0/wt=2/ujg=1/rs=AJ3lrY566_pqu5VTzeRzxklJYTL-90oyeQ/dti=1/m=_b,_tp:278
[ 1207ms] [ERROR] Failed to load resource: net::ERR_ADDRESS_UNREACHABLE @ https://www.google-analytics.com/analytics.js:0
[ 1337ms] [LOG] window.__LIGHTHOUSE_MOBILE_JSON__ = {fetchTime: 2026-07-19T11:35:32.601Z, requestedUrl: https://mnq.elkazurrotaberna.es/, finalUrl: https://mnq.elkazurrotaberna.es/, lighthouseVersion: 13.4.0, environment: Object} @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/ck=boq-chrome-wdi-lightbrary.PagespeedUi.ouhphnPBvuE.L.B1.O/am=AAAAACAT/d=1/exm=EF8pe,_b,_tp/excm=_b,_tp,analysisview/ed=1/wt=2/ujg=1/rs=AJ3lrY41Bmih43CWx322Juh5p7s_HSkqmA/ee=EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;JsbNhc:Xd8iUd;K5nYTd:ZDZcre;LBgRLc:SdcwHb;Me32dd:MEeYgc;NJ1rfe:qTnoBf;NPKaK:SdcwHb;NSEoX:lazG7b;Pjplud:EEDORb;QGR0gd:Mlhmy;SNUn3:ZwDk9d;ScI3Yc:e7Hzgb;Uvc8o:VDovNc;YIZmRd:A1yn5d;a56pNe:JEfCwb;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dowIGb:ebZ3mb;eBAeSb:zbML3c;iFQyKf:QIhFr;lOO0Vd:OTA3Ae;oGtAuc:sOXFj;pXdRYb:MdUzUe;qQEoOc:KUM7Z;qafBPd:yDVVkb;qddgKe:xQtZb;wR5FRb:O1Gjze;xqZiqf:BBI74;yEQyxe:h9EUVb;yxTchf:KUM7Z;zxnPse:GkRiKb/dti=1/m=ws9Tlc,O6y8ed,aW3pY,GkRiKb,e5qFLc,IZT63,YYmHzb,pw70Gc,n73qwf,UUJqVe,KUM7Z,O1Gjze,byfTOb,lsjVmc,xUdipf,ZDZcre,OTA3Ae,ZwDk9d,RyvaUb,iHYER,sJmisf,hpa48d,QHpVXc,pedvxc,PrPYRd,MpJwZc,LEikZe,NwH0H,V3dDOb,XVMNvd,QIhFr,xQtZb,lwddkf,gychg,w9hDv,RMhBfe,SdcwHb,EFQ78c,Ulmmrd,A7fCU,hc6Ubd,JNoxi,BVgquf,SpsfSb,Z5uLle,BBI74,MdUzUe,zbML3c,zr1jrb,Uas9Hd,pjICDe:1352
[ 1416ms] [LOG] window.__LIGHTHOUSE_DESKTOP_JSON__ = {fetchTime: 2026-07-19T11:35:33.108Z, requestedUrl: https://mnq.elkazurrotaberna.es/, finalUrl: https://mnq.elkazurrotaberna.es/, lighthouseVersion: 13.4.0, environment: Object} @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/ck=boq-chrome-wdi-lightbrary.PagespeedUi.ouhphnPBvuE.L.B1.O/am=AAAAACAT/d=1/exm=EF8pe,_b,_tp/excm=_b,_tp,analysisview/ed=1/wt=2/ujg=1/rs=AJ3lrY41Bmih43CWx322Juh5p7s_HSkqmA/ee=EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;JsbNhc:Xd8iUd;K5nYTd:ZDZcre;LBgRLc:SdcwHb;Me32dd:MEeYgc;NJ1rfe:qTnoBf;NPKaK:SdcwHb;NSEoX:lazG7b;Pjplud:EEDORb;QGR0gd:Mlhmy;SNUn3:ZwDk9d;ScI3Yc:e7Hzgb;Uvc8o:VDovNc;YIZmRd:A1yn5d;a56pNe:JEfCwb;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dowIGb:ebZ3mb;eBAeSb:zbML3c;iFQyKf:QIhFr;lOO0Vd:OTA3Ae;oGtAuc:sOXFj;pXdRYb:MdUzUe;qQEoOc:KUM7Z;qafBPd:yDVVkb;qddgKe:xQtZb;wR5FRb:O1Gjze;xqZiqf:BBI74;yEQyxe:h9EUVb;yxTchf:KUM7Z;zxnPse:GkRiKb/dti=1/m=ws9Tlc,O6y8ed,aW3pY,GkRiKb,e5qFLc,IZT63,YYmHzb,pw70Gc,n73qwf,UUJqVe,KUM7Z,O1Gjze,byfTOb,lsjVmc,xUdipf,ZDZcre,OTA3Ae,ZwDk9d,RyvaUb,iHYER,sJmisf,hpa48d,QHpVXc,pedvxc,PrPYRd,MpJwZc,LEikZe,NwH0H,V3dDOb,XVMNvd,QIhFr,xQtZb,lwddkf,gychg,w9hDv,RMhBfe,SdcwHb,EFQ78c,Ulmmrd,A7fCU,hc6Ubd,JNoxi,BVgquf,SpsfSb,Z5uLle,BBI74,MdUzUe,zbML3c,zr1jrb,Uas9Hd,pjICDe:1352
@@ -0,0 +1 @@
[ 339ms] [ERROR] Failed to load resource: net::ERR_ADDRESS_UNREACHABLE @ https://ogads-pa.clients6.google.com/$rpc/google.internal.onegoogle.asyncdata.v1.AsyncDataService/GetAsyncData:0
@@ -0,0 +1,8 @@
[ 610ms] [ERROR] Failed to load resource: net::ERR_ADDRESS_UNREACHABLE @ https://www.googletagmanager.com/gtag/js?id=G-S8N9N15MT1:0
[ 1485ms] [LOG] %c%s color: red; background: yellow; font-size: 24px; ADVERTENCIA @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/am=AAAAACAT/d=1/excm=_b,_tp,analysisview/ed=1/dg=0/wt=2/ujg=1/rs=AJ3lrY566_pqu5VTzeRzxklJYTL-90oyeQ/dti=1/m=_b,_tp:278
[ 1485ms] [LOG] %c%s font-size: 18px; Si utilizas esta consola, otras personas podrían hacerse pasar por ti y robarte datos mediante un ataque llamado Self-XSS.
No escribas ni pegues ningún código que no entiendas. @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/am=AAAAACAT/d=1/excm=_b,_tp,analysisview/ed=1/dg=0/wt=2/ujg=1/rs=AJ3lrY566_pqu5VTzeRzxklJYTL-90oyeQ/dti=1/m=_b,_tp:278
[ 1616ms] [ERROR] Failed to load resource: net::ERR_ADDRESS_UNREACHABLE @ https://www.google-analytics.com/analytics.js:0
[ 1730ms] [LOG] window.__LIGHTHOUSE_MOBILE_JSON__ = {fetchTime: 2026-07-20T12:43:06.207Z, requestedUrl: https://mnq.elkazurrotaberna.es/, finalUrl: https://mnq.elkazurrotaberna.es/, lighthouseVersion: 13.4.0, environment: Object} @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/ck=boq-chrome-wdi-lightbrary.PagespeedUi.ouhphnPBvuE.L.B1.O/am=AAAAACAT/d=1/exm=EF8pe,_b,_tp/excm=_b,_tp,analysisview/ed=1/wt=2/ujg=1/rs=AJ3lrY41Bmih43CWx322Juh5p7s_HSkqmA/ee=EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;JsbNhc:Xd8iUd;K5nYTd:ZDZcre;LBgRLc:SdcwHb;Me32dd:MEeYgc;NJ1rfe:qTnoBf;NPKaK:SdcwHb;NSEoX:lazG7b;Pjplud:EEDORb;QGR0gd:Mlhmy;SNUn3:ZwDk9d;ScI3Yc:e7Hzgb;Uvc8o:VDovNc;YIZmRd:A1yn5d;a56pNe:JEfCwb;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dowIGb:ebZ3mb;eBAeSb:zbML3c;iFQyKf:QIhFr;lOO0Vd:OTA3Ae;oGtAuc:sOXFj;pXdRYb:MdUzUe;qQEoOc:KUM7Z;qafBPd:yDVVkb;qddgKe:xQtZb;wR5FRb:O1Gjze;xqZiqf:BBI74;yEQyxe:h9EUVb;yxTchf:KUM7Z;zxnPse:GkRiKb/dti=1/m=ws9Tlc,O6y8ed,aW3pY,GkRiKb,e5qFLc,IZT63,YYmHzb,pw70Gc,n73qwf,UUJqVe,KUM7Z,O1Gjze,byfTOb,lsjVmc,xUdipf,ZDZcre,OTA3Ae,ZwDk9d,RyvaUb,iHYER,sJmisf,hpa48d,QHpVXc,pedvxc,PrPYRd,MpJwZc,LEikZe,NwH0H,V3dDOb,XVMNvd,QIhFr,xQtZb,lwddkf,gychg,w9hDv,RMhBfe,SdcwHb,EFQ78c,Ulmmrd,A7fCU,hc6Ubd,JNoxi,BVgquf,SpsfSb,Z5uLle,BBI74,MdUzUe,zbML3c,zr1jrb,Uas9Hd,pjICDe:1352
[ 2155ms] [LOG] window.__LIGHTHOUSE_DESKTOP_JSON__ = {fetchTime: 2026-07-20T12:43:05.665Z, requestedUrl: https://mnq.elkazurrotaberna.es/, finalUrl: https://mnq.elkazurrotaberna.es/, lighthouseVersion: 13.4.0, environment: Object} @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/ck=boq-chrome-wdi-lightbrary.PagespeedUi.ouhphnPBvuE.L.B1.O/am=AAAAACAT/d=1/exm=EF8pe,_b,_tp/excm=_b,_tp,analysisview/ed=1/wt=2/ujg=1/rs=AJ3lrY41Bmih43CWx322Juh5p7s_HSkqmA/ee=EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;JsbNhc:Xd8iUd;K5nYTd:ZDZcre;LBgRLc:SdcwHb;Me32dd:MEeYgc;NJ1rfe:qTnoBf;NPKaK:SdcwHb;NSEoX:lazG7b;Pjplud:EEDORb;QGR0gd:Mlhmy;SNUn3:ZwDk9d;ScI3Yc:e7Hzgb;Uvc8o:VDovNc;YIZmRd:A1yn5d;a56pNe:JEfCwb;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dowIGb:ebZ3mb;eBAeSb:zbML3c;iFQyKf:QIhFr;lOO0Vd:OTA3Ae;oGtAuc:sOXFj;pXdRYb:MdUzUe;qQEoOc:KUM7Z;qafBPd:yDVVkb;qddgKe:xQtZb;wR5FRb:O1Gjze;xqZiqf:BBI74;yEQyxe:h9EUVb;yxTchf:KUM7Z;zxnPse:GkRiKb/dti=1/m=ws9Tlc,O6y8ed,aW3pY,GkRiKb,e5qFLc,IZT63,YYmHzb,pw70Gc,n73qwf,UUJqVe,KUM7Z,O1Gjze,byfTOb,lsjVmc,xUdipf,ZDZcre,OTA3Ae,ZwDk9d,RyvaUb,iHYER,sJmisf,hpa48d,QHpVXc,pedvxc,PrPYRd,MpJwZc,LEikZe,NwH0H,V3dDOb,XVMNvd,QIhFr,xQtZb,lwddkf,gychg,w9hDv,RMhBfe,SdcwHb,EFQ78c,Ulmmrd,A7fCU,hc6Ubd,JNoxi,BVgquf,SpsfSb,Z5uLle,BBI74,MdUzUe,zbML3c,zr1jrb,Uas9Hd,pjICDe:1352
[ 64846ms] [ERROR] Failed to load resource: the server responded with a status of 502 () @ https://pagespeed.web.dev/_/PagespeedUi/browserinfo?f.sid=3065927403833037991&bl=boq_chrome-lightbrary-ui_20260715.03_p0&hl=es&_reqid=153106&rt=j:0
@@ -0,0 +1,7 @@
[ 372ms] [ERROR] Failed to load resource: net::ERR_ADDRESS_UNREACHABLE @ https://www.googletagmanager.com/gtag/js?id=G-S8N9N15MT1:0
[ 1393ms] [LOG] %c%s color: red; background: yellow; font-size: 24px; ADVERTENCIA @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/am=AAAAACAT/d=1/excm=_b,_tp,analysisview/ed=1/dg=0/wt=2/ujg=1/rs=AJ3lrY566_pqu5VTzeRzxklJYTL-90oyeQ/dti=1/m=_b,_tp:278
[ 1393ms] [LOG] %c%s font-size: 18px; Si utilizas esta consola, otras personas podrían hacerse pasar por ti y robarte datos mediante un ataque llamado Self-XSS.
No escribas ni pegues ningún código que no entiendas. @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/am=AAAAACAT/d=1/excm=_b,_tp,analysisview/ed=1/dg=0/wt=2/ujg=1/rs=AJ3lrY566_pqu5VTzeRzxklJYTL-90oyeQ/dti=1/m=_b,_tp:278
[ 1444ms] [ERROR] Failed to load resource: net::ERR_ADDRESS_UNREACHABLE @ https://www.google-analytics.com/analytics.js:0
[ 1515ms] [LOG] window.__LIGHTHOUSE_MOBILE_JSON__ = {fetchTime: 2026-07-20T15:18:21.833Z, requestedUrl: https://mnq.elkazurrotaberna.es/, finalUrl: https://mnq.elkazurrotaberna.es/, lighthouseVersion: 13.4.0, environment: Object} @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/ck=boq-chrome-wdi-lightbrary.PagespeedUi.ouhphnPBvuE.L.B1.O/am=AAAAACAT/d=1/exm=EF8pe,_b,_tp/excm=_b,_tp,analysisview/ed=1/wt=2/ujg=1/rs=AJ3lrY41Bmih43CWx322Juh5p7s_HSkqmA/ee=EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;JsbNhc:Xd8iUd;K5nYTd:ZDZcre;LBgRLc:SdcwHb;Me32dd:MEeYgc;NJ1rfe:qTnoBf;NPKaK:SdcwHb;NSEoX:lazG7b;Pjplud:EEDORb;QGR0gd:Mlhmy;SNUn3:ZwDk9d;ScI3Yc:e7Hzgb;Uvc8o:VDovNc;YIZmRd:A1yn5d;a56pNe:JEfCwb;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dowIGb:ebZ3mb;eBAeSb:zbML3c;iFQyKf:QIhFr;lOO0Vd:OTA3Ae;oGtAuc:sOXFj;pXdRYb:MdUzUe;qQEoOc:KUM7Z;qafBPd:yDVVkb;qddgKe:xQtZb;wR5FRb:O1Gjze;xqZiqf:BBI74;yEQyxe:h9EUVb;yxTchf:KUM7Z;zxnPse:GkRiKb/dti=1/m=ws9Tlc,O6y8ed,aW3pY,GkRiKb,e5qFLc,IZT63,YYmHzb,pw70Gc,n73qwf,UUJqVe,KUM7Z,O1Gjze,byfTOb,lsjVmc,xUdipf,ZDZcre,OTA3Ae,ZwDk9d,RyvaUb,iHYER,sJmisf,hpa48d,QHpVXc,pedvxc,PrPYRd,MpJwZc,LEikZe,NwH0H,V3dDOb,XVMNvd,QIhFr,xQtZb,lwddkf,gychg,w9hDv,RMhBfe,SdcwHb,EFQ78c,Ulmmrd,A7fCU,hc6Ubd,JNoxi,BVgquf,SpsfSb,Z5uLle,BBI74,MdUzUe,zbML3c,zr1jrb,Uas9Hd,pjICDe:1352
[ 1577ms] [LOG] window.__LIGHTHOUSE_DESKTOP_JSON__ = {fetchTime: 2026-07-20T15:18:21.647Z, requestedUrl: https://mnq.elkazurrotaberna.es/, finalUrl: https://mnq.elkazurrotaberna.es/, lighthouseVersion: 13.4.0, environment: Object} @ https://www.gstatic.com/_/mss/boq-chrome-wdi-lightbrary/_/js/k=boq-chrome-wdi-lightbrary.PagespeedUi.es.57Dk-wXGahk.2018.O/ck=boq-chrome-wdi-lightbrary.PagespeedUi.ouhphnPBvuE.L.B1.O/am=AAAAACAT/d=1/exm=EF8pe,_b,_tp/excm=_b,_tp,analysisview/ed=1/wt=2/ujg=1/rs=AJ3lrY41Bmih43CWx322Juh5p7s_HSkqmA/ee=EVNhjf:pw70Gc;EmZ2Bf:zr1jrb;JsbNhc:Xd8iUd;K5nYTd:ZDZcre;LBgRLc:SdcwHb;Me32dd:MEeYgc;NJ1rfe:qTnoBf;NPKaK:SdcwHb;NSEoX:lazG7b;Pjplud:EEDORb;QGR0gd:Mlhmy;SNUn3:ZwDk9d;ScI3Yc:e7Hzgb;Uvc8o:VDovNc;YIZmRd:A1yn5d;a56pNe:JEfCwb;cEt90b:ws9Tlc;dIoSBb:SpsfSb;dowIGb:ebZ3mb;eBAeSb:zbML3c;iFQyKf:QIhFr;lOO0Vd:OTA3Ae;oGtAuc:sOXFj;pXdRYb:MdUzUe;qQEoOc:KUM7Z;qafBPd:yDVVkb;qddgKe:xQtZb;wR5FRb:O1Gjze;xqZiqf:BBI74;yEQyxe:h9EUVb;yxTchf:KUM7Z;zxnPse:GkRiKb/dti=1/m=ws9Tlc,O6y8ed,aW3pY,GkRiKb,e5qFLc,IZT63,YYmHzb,pw70Gc,n73qwf,UUJqVe,KUM7Z,O1Gjze,byfTOb,lsjVmc,xUdipf,ZDZcre,OTA3Ae,ZwDk9d,RyvaUb,iHYER,sJmisf,hpa48d,QHpVXc,pedvxc,PrPYRd,MpJwZc,LEikZe,NwH0H,V3dDOb,XVMNvd,QIhFr,xQtZb,lwddkf,gychg,w9hDv,RMhBfe,SdcwHb,EFQ78c,Ulmmrd,A7fCU,hc6Ubd,JNoxi,BVgquf,SpsfSb,Z5uLle,BBI74,MdUzUe,zbML3c,zr1jrb,Uas9Hd,pjICDe:1352
@@ -0,0 +1,99 @@
- generic [ref=e1]:
- banner [ref=e2]:
- link "PageSpeed Insights logo PageSpeed Insights" [ref=e3] [cursor=pointer]:
- /url: ./
- img "PageSpeed Insights logo" [ref=e4]
- generic [ref=e5]: PageSpeed Insights
- generic [ref=e6]:
- button "Copiar enlace" [ref=e8]
- generic [ref=e16]:
- generic [ref=e18]: Documentos
- link "Documentos" [ref=e19] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- generic [ref=e26]:
- generic [ref=e27]:
- generic [ref=e28]: Este sitio usa cookies de Google para ofrecer sus servicios y analizar el tráfico.
- generic [ref=e29]:
- generic [ref=e31]:
- generic [ref=e33]: Más información
- link "Más información" [ref=e34] [cursor=pointer]:
- /url: https://policies.google.com/technologies/cookies
- button "Entendido" [ref=e36]
- generic [ref=e40]: Informe del 19 jul 2026, 13:35:29
- generic [ref=e41]:
- generic [ref=e42]:
- textbox [active] [ref=e44]:
- /placeholder: Escribe la URL de una página web
- text: https://mnq.elkazurrotaberna.es/
- paragraph [ref=e46]: Introduce una URL válida
- button "Analizar" [ref=e48]
- generic [ref=e54]:
- tablist [ref=e55]:
- generic [ref=e58]:
- tab "Móvil" [ref=e59] [cursor=pointer]:
- generic:
- generic: smartphone
- generic: Móvil
- tab "Ordenador" [selected] [ref=e61] [cursor=pointer]:
- generic:
- generic: computer
- generic: Ordenador
- tabpanel "Ordenador" [ref=e63]:
- generic [ref=e65]:
- generic [ref=e67]:
- generic [ref=e68]:
- generic [ref=e69]: Descubre lo que experimentan tus usuarios reales
- generic [ref=e71]:
- button "button" [ref=e73] [cursor=pointer]
- generic [ref=e77]: No hay datos
- separator [ref=e78]
- generic [ref=e79]: Diagnostica problemas de rendimiento
- contentinfo [ref=e84]:
- generic [ref=e85]:
- generic [ref=e86]:
- generic [ref=e87]:
- generic [ref=e88]: Más información en PageSpeed Insights
- link "Novedades" [ref=e90] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/release_notes
- link "Documentación" [ref=e92] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- link "Más información sobre el rendimiento web" [ref=e94] [cursor=pointer]:
- /url: https://developers.google.com/speed
- link "Haz preguntas en Stack Overflow" [ref=e96] [cursor=pointer]:
- /url: https://stackoverflow.com/questions/tagged/pagespeed-insights
- link "Lista de distribución" [ref=e98] [cursor=pointer]:
- /url: https://groups.google.com/g/pagespeed-insights-discuss
- generic [ref=e99]:
- generic [ref=e100]: Contenido relacionado
- link "Actualizaciones" [ref=e102] [cursor=pointer]:
- /url: https://developer.chrome.com/blog
- link "Aspectos básicos de la Web" [ref=e104] [cursor=pointer]:
- /url: https://developers.google.com/focus/web-development
- link "Casos de éxito" [ref=e106] [cursor=pointer]:
- /url: https://web.dev/case-studies
- link "Pódcasts" [ref=e108] [cursor=pointer]:
- /url: https://web.dev/shows
- generic [ref=e109]:
- generic [ref=e110]: Contacto
- link "Twitter" [ref=e112] [cursor=pointer]:
- /url: https://twitter.com/ChromiumDev
- link "YouTube" [ref=e114] [cursor=pointer]:
- /url: https://www.youtube.com/user/ChromeDevelopers
- generic [ref=e115]:
- link [ref=e116] [cursor=pointer]:
- /url: https://developers.google.com/
- img "Google Developers Logo" [ref=e117]
- link "Chrome" [ref=e118] [cursor=pointer]:
- /url: https://developer.chrome.com/
- link "Firebase" [ref=e119] [cursor=pointer]:
- /url: https://firebase.google.com/
- link "Todos los productos" [ref=e120] [cursor=pointer]:
- /url: https://developers.google.com/products/
- generic [ref=e121]:
- link "Política de Términos y Privacidad" [ref=e123] [cursor=pointer]:
- /url: https://policies.google.com/
- generic [ref=e124]:
- text: Para obtener más información, consulta las
- link "Políticas del Sitio Google Developers" [ref=e125] [cursor=pointer]:
- /url: https://developers.google.com/terms/site-policies
- text: .
@@ -0,0 +1,448 @@
- generic [ref=e1]:
- banner [ref=e2]:
- link "PageSpeed Insights logo PageSpeed Insights" [ref=e3] [cursor=pointer]:
- /url: ./
- img "PageSpeed Insights logo" [ref=e4]
- generic [ref=e5]: PageSpeed Insights
- generic [ref=e6]:
- button "Copiar enlace" [ref=e8]
- generic [ref=e16]:
- generic [ref=e18]: Documentos
- link "Documentos" [ref=e19] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- generic [ref=e26]:
- generic [ref=e27]:
- generic [ref=e28]: Este sitio usa cookies de Google para ofrecer sus servicios y analizar el tráfico.
- generic [ref=e29]:
- generic [ref=e31]:
- generic [ref=e33]: Más información
- link "Más información" [ref=e34] [cursor=pointer]:
- /url: https://policies.google.com/technologies/cookies
- button "Entendido" [ref=e36]
- generic [ref=e40]: Informe del 19 jul 2026, 13:35:29
- generic [ref=e41]:
- generic [ref=e42]:
- textbox [ref=e44]:
- /placeholder: Escribe la URL de una página web
- text: https://mnq.elkazurrotaberna.es/
- paragraph [ref=e46]: Introduce una URL válida
- button "Analizar" [ref=e48]
- generic [ref=e54]:
- tablist [ref=e55]:
- generic [ref=e58]:
- tab "Móvil" [ref=e59] [cursor=pointer]:
- generic:
- generic: smartphone
- generic: Móvil
- tab "Ordenador" [selected] [ref=e61] [cursor=pointer]:
- generic:
- generic: computer
- generic: Ordenador
- text: — — — — — — — — — —
- tabpanel "Ordenador" [ref=e63]:
- generic [ref=e65]:
- generic [ref=e67]:
- generic [ref=e68]:
- generic [ref=e69]: Descubre lo que experimentan tus usuarios reales
- generic [ref=e71]:
- button "button" [ref=e73] [cursor=pointer]
- generic [ref=e77]: No hay datos
- separator [ref=e78]
- generic [ref=e79]:
- generic [ref=e80]: Diagnostica problemas de rendimiento
- article [ref=e128]:
- generic [ref=e129]:
- generic [ref=e134]:
- link "80 Rendimiento" [ref=e135] [cursor=pointer]:
- /url: "#performance"
- generic [ref=e140]: "80"
- generic [ref=e141]: Rendimiento
- link "96 Accesibilidad" [ref=e142] [cursor=pointer]:
- /url: "#accessibility"
- generic [ref=e147]: "96"
- generic [ref=e148]: Accesibilidad
- link "100 Prácticas recomendadas" [ref=e149] [cursor=pointer]:
- /url: "#best-practices"
- generic [ref=e154]: "100"
- generic [ref=e155]: Prácticas recomendadas
- link "100 SEO" [ref=e156] [cursor=pointer]:
- /url: "#seo"
- generic [ref=e161]: "100"
- generic [ref=e162]: SEO
- link "2/2 Navegación agéntica" [ref=e163] [cursor=pointer]:
- /url: "#agentic-browsing"
- generic [ref=e164]: 2/2
- generic [ref=e168]: Navegación agéntica
- generic [ref=e170]:
- generic [ref=e172]:
- generic [ref=e173]:
- generic [ref=e174]:
- img [ref=e178]:
- generic [ref=e179]: "80"
- generic [ref=e184]:
- generic:
- generic: FCP
- generic: "+5"
- generic:
- generic: LCP
- generic: "+12"
- generic:
- generic: TBT
- generic: "+30"
- generic:
- generic: CLS
- generic: "+25"
- generic:
- generic: SI
- generic: "+8"
- generic [ref=e186]: Rendimiento
- generic [ref=e188]:
- generic [ref=e189]:
- text: Los valores son estimaciones y pueden variar. La
- link "puntuación del rendimiento se calcula" [ref=e190] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: directamente a partir de estas métricas.
- link "Ver calculadora." [ref=e191] [cursor=pointer]:
- /url: https://googlechrome.github.io/lighthouse/scorecalc/#FCP=1648&LCP=2408&TBT=0&CLS=0.01&SI=1648&TTI=2420&device=desktop&version=13.4.0
- generic [ref=e193]:
- generic [ref=e194]: 0–49
- generic [ref=e195]: 50–89
- generic [ref=e196]: 90–100
- img "Final Screenshot" [ref=e199]
- generic [ref=e200]:
- checkbox "Toggle the display of metric descriptions" [ref=e201]
- generic [ref=e202]:
- generic [ref=e203]: Métricas
- generic [ref=e204] [cursor=pointer]: Ampliar vista
- generic [ref=e205]:
- generic [ref=e207]:
- generic [ref=e209]: First Contentful Paint
- generic [ref=e210]: 1,6 s
- generic [ref=e212]:
- generic [ref=e214]: Renderizado del mayor elemento con contenido
- generic [ref=e215]: 2,4 s
- generic [ref=e217]:
- generic [ref=e219]: Total Blocking Time
- generic [ref=e220]: 0 ms
- generic [ref=e222]:
- generic [ref=e224]: Cambios de diseño acumulados
- generic [ref=e225]: "0.008"
- generic [ref=e227]:
- generic [ref=e229]: Speed Index
- generic [ref=e230]: 1,6 s
- list [ref=e231]:
- listitem [ref=e232]: Captured at 19 jul 2026, 13:35 CEST
- listitem [ref=e233]: Escritorio emulado with Lighthouse 13.4.0
- listitem [ref=e234]: Sesión de una sola página
- listitem [ref=e235]: Carga inicial de la página
- listitem [ref=e236]: Limitación personalizada
- listitem [ref=e237]: Using HeadlessChromium 149.0.7827.155 with lr
- button "Ver gráfico de rectángulos" [ref=e239] [cursor=pointer]
- generic [ref=e241]:
- img "Screenshot" [ref=e243]
- img "Screenshot" [ref=e245]
- img "Screenshot" [ref=e247]
- img "Screenshot" [ref=e249]
- img "Screenshot" [ref=e251]
- img "Screenshot" [ref=e253]
- img "Screenshot" [ref=e255]
- img "Screenshot" [ref=e257]
- generic [ref=e258]:
- generic [ref=e259]:
- generic [ref=e260]: "Mostrar auditorías relacionadas con:"
- radio "All" [checked] [ref=e261]
- generic [ref=e262] [cursor=pointer]: All
- radio "FCP" [ref=e263]
- generic "First Contentful Paint" [ref=e264] [cursor=pointer]: FCP
- radio "LCP" [ref=e265]
- generic "Renderizado del mayor elemento con contenido" [ref=e266] [cursor=pointer]: LCP
- radio "CLS" [ref=e267]
- generic "Cambios de diseño acumulados" [ref=e268] [cursor=pointer]: CLS
- generic [ref=e269]:
- generic [ref=e270]: Estadísticas
- group [ref=e272]:
- generic "Solicitudes que bloquean el renderizado —Ahorro estimado de 1380 ms" [ref=e273] [cursor=pointer]:
- generic [ref=e276]:
- generic [ref=e277]: Solicitudes que bloquean el renderizado
- text: —Ahorro estimado de 1380 ms
- group [ref=e284]:
- generic "Mejorar la entrega de imágenes —Ahorro estimado de 1423 KiB" [ref=e285] [cursor=pointer]:
- generic [ref=e288]:
- generic [ref=e289]: Mejorar la entrega de imágenes
- text: —Ahorro estimado de 1423 KiB
- group [ref=e296]:
- generic "Árbol de dependencia de red" [ref=e297] [cursor=pointer]
- group [ref=e308]:
- generic "Latencia de solicitud del documento —Ahorro estimado de 13 KiB" [ref=e309] [cursor=pointer]:
- generic [ref=e312]:
- generic [ref=e313]: Latencia de solicitud del documento
- text: —Ahorro estimado de 13 KiB
- group [ref=e320]:
- generic "Causantes de los cambios de diseño" [ref=e321] [cursor=pointer]
- group [ref=e332]:
- generic "Desglose de LCP" [ref=e333] [cursor=pointer]
- group [ref=e344]:
- generic "Terceros" [ref=e345] [cursor=pointer]
- generic [ref=e355]:
- text: Estas estadísticas también están disponibles en el panel Rendimiento de Chrome DevTools.
- link "Graba una traza" [ref=e356] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/devtools/performance/reference?utm_source=lighthouse&utm_medium=lr
- text: para ver información más detallada.
- generic [ref=e357]:
- generic [ref=e358]: Diagnósticos
- group [ref=e360]:
- generic "Reduce el contenido CSS que no se use —Ahorro estimado de 11 KiB" [ref=e361] [cursor=pointer]:
- generic [ref=e364]:
- generic [ref=e365]: Reduce el contenido CSS que no se use
- text: —Ahorro estimado de 11 KiB
- group [ref=e372]:
- generic [ref=e378] [cursor=pointer]:
- text: Los elementos de imagen no tienen
- code [ref=e379]: width
- text: "y"
- code [ref=e380]: height
- text: explícitos
- group [ref=e387]:
- 'generic "Evita cargas útiles de red de gran tamaño —Tamaño total: 3085 KiB" [ref=e388] [cursor=pointer]':
- generic [ref=e391]:
- generic [ref=e392]: Evita cargas útiles de red de gran tamaño
- text: "—Tamaño total: 3085 KiB"
- group [ref=e399]:
- generic "Evita las animaciones no compuestas —2 elementos animados encontrados" [ref=e400] [cursor=pointer]:
- generic [ref=e403]:
- generic [ref=e404]: Evita las animaciones no compuestas
- text: —2 elementos animados encontrados
- generic [ref=e410]:
- text: Consulta más información sobre el rendimiento de tu aplicación. Estos datos no
- link "afectan directamente" [ref=e411] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: a la puntuación del rendimiento.
- group [ref=e413]:
- generic "Auditorías aprobadas (16) Mostrar" [ref=e414] [cursor=pointer]:
- generic [ref=e415]:
- generic [ref=e416]: Auditorías aprobadas (16)
- generic [ref=e417]: Mostrar
- text: — —
- generic [ref=e419]:
- generic [ref=e420]:
- heading "96 Accesibilidad" [level=2] [ref=e421]:
- generic [ref=e422]:
- generic [ref=e427]: "96"
- generic [ref=e428]: Accesibilidad
- generic [ref=e430]:
- text: Estas comprobaciones permiten identificar oportunidades para
- link "mejorar la accesibilidad de tu aplicación web" [ref=e431] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/accessibility/?utm_source=lighthouse&utm_medium=lr
- text: . La detección automática solo puede detectar un subconjunto de problemas y no garantiza la accesibilidad de tu aplicación web, por lo que también te recomendamos que hagas
- link "pruebas manuales" [ref=e432] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: .
- generic [ref=e433]:
- generic [ref=e434]:
- generic [ref=e435]: Contraste
- group [ref=e437]:
- generic "Los colores de fondo y de primer plano no tienen una relación de contraste adecuada." [ref=e438] [cursor=pointer]
- generic [ref=e657]:
- text: Los textos con poco contraste resultan difíciles o imposibles de leer para muchos usuarios.
- link "Consulta cómo crear suficiente contraste de color" [ref=e658] [cursor=pointer]:
- /url: https://dequeuniversity.com/rules/axe/4.12/color-contrast
- table [ref=e659]:
- rowgroup [ref=e660]:
- row [ref=e661]:
- columnheader "Elementos con errores" [ref=e662]
- rowgroup [ref=e664]:
- row [ref=e665]:
- cell "Excelencia culinaria · Diseño de eventos · Gastronomía de autor <p class=\"text-body-sm text-muted opacity-60\">" [ref=e666]:
- generic "footer.site-footer > div.page-wrap > div.footer-bottom > p.text-body-sm" [ref=e667]:
- generic [ref=e668]: Excelencia culinaria · Diseño de eventos · Gastronomía de autor
- generic [ref=e669]: <p class="text-body-sm text-muted opacity-60">
- row [ref=e670]:
- cell "© 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más import… <footer class=\"site-footer\">" [ref=e671]:
- generic "body.page-ready > footer.site-footer" [ref=e672]:
- generic [ref=e673]: © 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más import…
- generic [ref=e674]: <footer class="site-footer">
- generic [ref=e448]: A continuación se indican consejos para facilitar la lectura del contenido.
- generic [ref=e449]:
- generic [ref=e450]: Prácticas recomendadas
- group [ref=e452]:
- generic "Los enlaces idénticos tienen la misma finalidad." [active] [ref=e453] [cursor=pointer]
- generic [ref=e675]:
- generic [ref=e676]:
- text: Los enlaces con el mismo destino deben tener la misma descripción para que los usuarios puedan entender su finalidad y decidir si quieren seguirlo.
- link "Obtén más información sobre los enlaces idénticos" [ref=e677] [cursor=pointer]:
- /url: https://dequeuniversity.com/rules/axe/4.12/identical-links-same-purpose
- text: .
- generic "Esta auditoría no contribuye a la puntuación general de la categoría." [ref=e678]: Sin puntuar
- table [ref=e679]:
- rowgroup [ref=e680]:
- row [ref=e681]:
- columnheader "Elementos con errores" [ref=e682]
- rowgroup [ref=e684]:
- row [ref=e685]:
- cell "WHATSAPP <a href=\"https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20eve…\" class=\"btn btn-pill nav-wa\" target=\"_blank\" rel=\"noreferrer\" data-astro-cid-ctg3m53h=\"\">" [ref=e686]:
- generic "header.site-header > div.page-wrap > div.nav-actions > a.btn" [ref=e687]:
- generic [ref=e693]: WHATSAPP
- generic [ref=e694]: <a href="https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20eve…" class="btn btn-pill nav-wa" target="_blank" rel="noreferrer" data-astro-cid-ctg3m53h="">
- row [ref=e695]:
- cell "WhatsApp <a href=\"https://wa.me/34678171513\" class=\"footer-link\" target=\"_blank\" rel=\"noreferrer\">" [ref=e696]:
- generic "div.footer-inner > div.footer-links > div.footer-col > a.footer-link" [ref=e697]:
- generic [ref=e698]: WhatsApp
- generic [ref=e699]: <a href="https://wa.me/34678171513" class="footer-link" target="_blank" rel="noreferrer">
- generic [ref=e463]: Estos elementos destacan las prácticas recomendadas de accesibilidad más habituales.
- generic [ref=e464]:
- group [ref=e465]:
- generic "Elementos adicionales que se deben comprobar manualmente (10) Mostrar" [ref=e466] [cursor=pointer]:
- generic [ref=e467]:
- generic [ref=e468]: Elementos adicionales que se deben comprobar manualmente (10)
- generic [ref=e469]: Mostrar
- generic [ref=e470]:
- text: Estos elementos se ocupan de áreas que las herramientas de prueba automáticas no pueden analizar. Consulta más información sobre cómo
- link "revisar la accesibilidad" [ref=e471] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: en nuestra guía.
- group [ref=e473]:
- generic "Auditorías aprobadas (22) Mostrar" [ref=e474] [cursor=pointer]:
- generic [ref=e475]:
- generic [ref=e476]: Auditorías aprobadas (22)
- generic [ref=e477]: Mostrar
- group [ref=e479]:
- generic "No aplicable (39) Mostrar" [ref=e480] [cursor=pointer]:
- generic [ref=e481]:
- generic [ref=e482]: No aplicable (39)
- generic [ref=e483]: Mostrar
- generic [ref=e485]:
- heading "100 Prácticas recomendadas" [level=2] [ref=e487]:
- generic [ref=e488]:
- generic [ref=e493]: "100"
- generic [ref=e494]: Prácticas recomendadas
- generic [ref=e495]:
- generic [ref=e496]:
- generic [ref=e497]: Confianza y seguridad
- group [ref=e499]:
- generic "Asegura que la CSP sea efectiva frente a ataques XSS" [ref=e500] [cursor=pointer]
- group [ref=e511]:
- generic "Usa una política de HSTS sólida" [ref=e512] [cursor=pointer]
- group [ref=e523]:
- generic "Asegúrate de que el aislamiento de orígenes sea adecuado con COOP" [ref=e524] [cursor=pointer]
- group [ref=e535]:
- generic "Mitiga el secuestro de clics con XFO o CSP" [ref=e536] [cursor=pointer]
- group [ref=e547]:
- generic "Mitigar el XSS basado en DOM con Trusted Types" [ref=e548] [cursor=pointer]
- generic [ref=e558]:
- generic [ref=e559]: Compatibilidad con navegadores
- group [ref=e561]:
- generic "Funciones de Baseline" [ref=e562] [cursor=pointer]
- group [ref=e573]:
- generic "Auditorías aprobadas (13) Mostrar" [ref=e574] [cursor=pointer]:
- generic [ref=e575]:
- generic [ref=e576]: Auditorías aprobadas (13)
- generic [ref=e577]: Mostrar
- group [ref=e579]:
- generic "No aplicable (2) Mostrar" [ref=e580] [cursor=pointer]:
- generic [ref=e581]:
- generic [ref=e582]: No aplicable (2)
- generic [ref=e583]: Mostrar
- generic [ref=e585]:
- generic [ref=e586]:
- heading "100 SEO" [level=2] [ref=e587]:
- generic [ref=e588]:
- generic [ref=e593]: "100"
- generic [ref=e594]: SEO
- generic [ref=e596]:
- text: Estas comprobaciones aseguran que tu página siga las recomendaciones básicas sobre optimización en buscadores. Hay muchos otros factores adicionales que Lighthouse no valora aquí y que pueden afectar a tu posicionamiento en las búsquedas, como el rendimiento en las
- link "Métricas web principales" [ref=e597] [cursor=pointer]:
- /url: https://web.dev/explore/vitals?utm_source=lighthouse&utm_medium=lr
- text: .
- link "Consulta más información sobre las Directrices básicas de la Búsqueda de Google" [ref=e598] [cursor=pointer]:
- /url: https://support.google.com/webmasters/answer/35769
- text: .
- generic [ref=e599]:
- group [ref=e600]:
- generic "Elementos adicionales que se deben comprobar manualmente (1) Ocultar" [ref=e601] [cursor=pointer]:
- generic [ref=e602]:
- generic [ref=e603]: Elementos adicionales que se deben comprobar manualmente (1)
- generic [ref=e604]: Ocultar
- group [ref=e607]:
- generic "Los datos estructurados son válidos" [ref=e608] [cursor=pointer]
- generic [ref=e618]: Ejecuta estos validadores adicionales en tu sitio web para comprobar más prácticas recomendadas de SEO.
- group [ref=e620]:
- generic "Auditorías aprobadas (8) Mostrar" [ref=e621] [cursor=pointer]:
- generic [ref=e622]:
- generic [ref=e623]: Auditorías aprobadas (8)
- generic [ref=e624]: Mostrar
- group [ref=e626]:
- generic "No aplicable (2) Mostrar" [ref=e627] [cursor=pointer]:
- generic [ref=e628]:
- generic [ref=e629]: No aplicable (2)
- generic [ref=e630]: Mostrar
- generic [ref=e632]:
- generic [ref=e633]:
- heading "2/2 Navegación agéntica" [level=2] [ref=e634]:
- generic [ref=e635]:
- generic [ref=e636]: 2/2
- generic [ref=e640]: Navegación agéntica
- generic [ref=e642]:
- text: Estas comprobaciones aseguran unos
- link "sitios web de alta calidad en los que los agentes de IA puedan navegar" [ref=e643] [cursor=pointer]:
- /url: https://goo.gle/lighthouse-agentic-web
- text: ", y validan que las integraciones de WebMCP sean correctas. Esta categoría aún está en desarrollo y puede cambiar."
- group [ref=e645]:
- generic "Auditorías aprobadas (2) Mostrar" [ref=e646] [cursor=pointer]:
- generic [ref=e647]:
- generic [ref=e648]: Auditorías aprobadas (2)
- generic [ref=e649]: Mostrar
- text: — —
- group [ref=e651]:
- generic "No aplicable (4) Mostrar" [ref=e652] [cursor=pointer]:
- generic [ref=e653]:
- generic [ref=e654]: No aplicable (4)
- generic [ref=e655]: Mostrar
- contentinfo [ref=e84]:
- generic [ref=e85]:
- generic [ref=e86]:
- generic [ref=e87]:
- generic [ref=e88]: Más información en PageSpeed Insights
- link "Novedades" [ref=e90] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/release_notes
- link "Documentación" [ref=e92] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- link "Más información sobre el rendimiento web" [ref=e94] [cursor=pointer]:
- /url: https://developers.google.com/speed
- link "Haz preguntas en Stack Overflow" [ref=e96] [cursor=pointer]:
- /url: https://stackoverflow.com/questions/tagged/pagespeed-insights
- link "Lista de distribución" [ref=e98] [cursor=pointer]:
- /url: https://groups.google.com/g/pagespeed-insights-discuss
- generic [ref=e99]:
- generic [ref=e100]: Contenido relacionado
- link "Actualizaciones" [ref=e102] [cursor=pointer]:
- /url: https://developer.chrome.com/blog
- link "Aspectos básicos de la Web" [ref=e104] [cursor=pointer]:
- /url: https://developers.google.com/focus/web-development
- link "Casos de éxito" [ref=e106] [cursor=pointer]:
- /url: https://web.dev/case-studies
- link "Pódcasts" [ref=e108] [cursor=pointer]:
- /url: https://web.dev/shows
- generic [ref=e109]:
- generic [ref=e110]: Contacto
- link "Twitter" [ref=e112] [cursor=pointer]:
- /url: https://twitter.com/ChromiumDev
- link "YouTube" [ref=e114] [cursor=pointer]:
- /url: https://www.youtube.com/user/ChromeDevelopers
- generic [ref=e115]:
- link [ref=e116] [cursor=pointer]:
- /url: https://developers.google.com/
- img "Google Developers Logo" [ref=e117]
- link "Chrome" [ref=e118] [cursor=pointer]:
- /url: https://developer.chrome.com/
- link "Firebase" [ref=e119] [cursor=pointer]:
- /url: https://firebase.google.com/
- link "Todos los productos" [ref=e120] [cursor=pointer]:
- /url: https://developers.google.com/products/
- generic [ref=e121]:
- link "Política de Términos y Privacidad" [ref=e123] [cursor=pointer]:
- /url: https://policies.google.com/
- generic [ref=e124]:
- text: Para obtener más información, consulta las
- link "Políticas del Sitio Google Developers" [ref=e125] [cursor=pointer]:
- /url: https://developers.google.com/terms/site-policies
- text: .
@@ -0,0 +1,448 @@
- generic [ref=e1]:
- banner [ref=e2]:
- link "PageSpeed Insights logo PageSpeed Insights" [ref=e3] [cursor=pointer]:
- /url: ./
- img "PageSpeed Insights logo" [ref=e4]
- generic [ref=e5]: PageSpeed Insights
- generic [ref=e6]:
- button "Copiar enlace" [ref=e8]
- generic [ref=e16]:
- generic [ref=e18]: Documentos
- link "Documentos" [ref=e19] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- generic [ref=e26]:
- generic [ref=e27]:
- generic [ref=e28]: Este sitio usa cookies de Google para ofrecer sus servicios y analizar el tráfico.
- generic [ref=e29]:
- generic [ref=e31]:
- generic [ref=e33]: Más información
- link "Más información" [ref=e34] [cursor=pointer]:
- /url: https://policies.google.com/technologies/cookies
- button "Entendido" [ref=e36]
- generic [ref=e40]: Informe del 19 jul 2026, 13:35:29
- generic [ref=e41]:
- generic [ref=e42]:
- textbox [ref=e44]:
- /placeholder: Escribe la URL de una página web
- text: https://mnq.elkazurrotaberna.es/
- paragraph [ref=e46]: Introduce una URL válida
- button "Analizar" [ref=e48]
- generic [ref=e54]:
- tablist [ref=e55]:
- generic [ref=e58]:
- tab "Móvil" [ref=e59] [cursor=pointer]:
- generic:
- generic: smartphone
- generic: Móvil
- tab "Ordenador" [selected] [ref=e61] [cursor=pointer]:
- generic:
- generic: computer
- generic: Ordenador
- text: — — — — — — — — — —
- tabpanel "Ordenador" [ref=e63]:
- generic [ref=e65]:
- generic [ref=e67]:
- generic [ref=e68]:
- generic [ref=e69]: Descubre lo que experimentan tus usuarios reales
- generic [ref=e71]:
- button "button" [ref=e73] [cursor=pointer]
- generic [ref=e77]: No hay datos
- separator [ref=e78]
- generic [ref=e79]:
- generic [ref=e80]: Diagnostica problemas de rendimiento
- article [ref=e128]:
- generic [ref=e129]:
- generic [ref=e134]:
- link "80 Rendimiento" [ref=e135] [cursor=pointer]:
- /url: "#performance"
- generic [ref=e140]: "80"
- generic [ref=e141]: Rendimiento
- link "96 Accesibilidad" [ref=e142] [cursor=pointer]:
- /url: "#accessibility"
- generic [ref=e147]: "96"
- generic [ref=e148]: Accesibilidad
- link "100 Prácticas recomendadas" [ref=e149] [cursor=pointer]:
- /url: "#best-practices"
- generic [ref=e154]: "100"
- generic [ref=e155]: Prácticas recomendadas
- link "100 SEO" [ref=e156] [cursor=pointer]:
- /url: "#seo"
- generic [ref=e161]: "100"
- generic [ref=e162]: SEO
- link "2/2 Navegación agéntica" [ref=e163] [cursor=pointer]:
- /url: "#agentic-browsing"
- generic [ref=e164]: 2/2
- generic [ref=e168]: Navegación agéntica
- generic [ref=e170]:
- generic [ref=e172]:
- generic [ref=e173]:
- generic [ref=e174]:
- img [ref=e178]:
- generic [ref=e179]: "80"
- generic [ref=e184]:
- generic:
- generic: FCP
- generic: "+5"
- generic:
- generic: LCP
- generic: "+12"
- generic:
- generic: TBT
- generic: "+30"
- generic:
- generic: CLS
- generic: "+25"
- generic:
- generic: SI
- generic: "+8"
- generic [ref=e186]: Rendimiento
- generic [ref=e188]:
- generic [ref=e189]:
- text: Los valores son estimaciones y pueden variar. La
- link "puntuación del rendimiento se calcula" [ref=e190] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: directamente a partir de estas métricas.
- link "Ver calculadora." [ref=e191] [cursor=pointer]:
- /url: https://googlechrome.github.io/lighthouse/scorecalc/#FCP=1648&LCP=2408&TBT=0&CLS=0.01&SI=1648&TTI=2420&device=desktop&version=13.4.0
- generic [ref=e193]:
- generic [ref=e194]: 0–49
- generic [ref=e195]: 50–89
- generic [ref=e196]: 90–100
- img "Final Screenshot" [ref=e199]
- generic [ref=e200]:
- checkbox "Toggle the display of metric descriptions" [ref=e201]
- generic [ref=e202]:
- generic [ref=e203]: Métricas
- generic [ref=e204] [cursor=pointer]: Ampliar vista
- generic [ref=e205]:
- generic [ref=e207]:
- generic [ref=e209]: First Contentful Paint
- generic [ref=e210]: 1,6 s
- generic [ref=e212]:
- generic [ref=e214]: Renderizado del mayor elemento con contenido
- generic [ref=e215]: 2,4 s
- generic [ref=e217]:
- generic [ref=e219]: Total Blocking Time
- generic [ref=e220]: 0 ms
- generic [ref=e222]:
- generic [ref=e224]: Cambios de diseño acumulados
- generic [ref=e225]: "0.008"
- generic [ref=e227]:
- generic [ref=e229]: Speed Index
- generic [ref=e230]: 1,6 s
- list [ref=e231]:
- listitem [ref=e232]: Captured at 19 jul 2026, 13:35 CEST
- listitem [ref=e233]: Escritorio emulado with Lighthouse 13.4.0
- listitem [ref=e234]: Sesión de una sola página
- listitem [ref=e235]: Carga inicial de la página
- listitem [ref=e236]: Limitación personalizada
- listitem [ref=e237]: Using HeadlessChromium 149.0.7827.155 with lr
- button "Ver gráfico de rectángulos" [ref=e239] [cursor=pointer]
- generic [ref=e241]:
- img "Screenshot" [ref=e243]
- img "Screenshot" [ref=e245]
- img "Screenshot" [ref=e247]
- img "Screenshot" [ref=e249]
- img "Screenshot" [ref=e251]
- img "Screenshot" [ref=e253]
- img "Screenshot" [ref=e255]
- img "Screenshot" [ref=e257]
- generic [ref=e258]:
- generic [ref=e259]:
- generic [ref=e260]: "Mostrar auditorías relacionadas con:"
- radio "All" [checked] [ref=e261]
- generic [ref=e262] [cursor=pointer]: All
- radio "FCP" [ref=e263]
- generic "First Contentful Paint" [ref=e264] [cursor=pointer]: FCP
- radio "LCP" [ref=e265]
- generic "Renderizado del mayor elemento con contenido" [ref=e266] [cursor=pointer]: LCP
- radio "CLS" [ref=e267]
- generic "Cambios de diseño acumulados" [ref=e268] [cursor=pointer]: CLS
- generic [ref=e269]:
- generic [ref=e270]: Estadísticas
- group [ref=e272]:
- generic "Solicitudes que bloquean el renderizado —Ahorro estimado de 1380 ms" [ref=e273] [cursor=pointer]:
- generic [ref=e276]:
- generic [ref=e277]: Solicitudes que bloquean el renderizado
- text: —Ahorro estimado de 1380 ms
- group [ref=e284]:
- generic "Mejorar la entrega de imágenes —Ahorro estimado de 1423 KiB" [ref=e285] [cursor=pointer]:
- generic [ref=e288]:
- generic [ref=e289]: Mejorar la entrega de imágenes
- text: —Ahorro estimado de 1423 KiB
- group [ref=e296]:
- generic "Árbol de dependencia de red" [ref=e297] [cursor=pointer]
- group [ref=e308]:
- generic "Latencia de solicitud del documento —Ahorro estimado de 13 KiB" [ref=e309] [cursor=pointer]:
- generic [ref=e312]:
- generic [ref=e313]: Latencia de solicitud del documento
- text: —Ahorro estimado de 13 KiB
- group [ref=e320]:
- generic "Causantes de los cambios de diseño" [ref=e321] [cursor=pointer]
- group [ref=e332]:
- generic "Desglose de LCP" [ref=e333] [cursor=pointer]
- group [ref=e344]:
- generic "Terceros" [ref=e345] [cursor=pointer]
- generic [ref=e355]:
- text: Estas estadísticas también están disponibles en el panel Rendimiento de Chrome DevTools.
- link "Graba una traza" [ref=e356] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/devtools/performance/reference?utm_source=lighthouse&utm_medium=lr
- text: para ver información más detallada.
- generic [ref=e357]:
- generic [ref=e358]: Diagnósticos
- group [ref=e360]:
- generic "Reduce el contenido CSS que no se use —Ahorro estimado de 11 KiB" [ref=e361] [cursor=pointer]:
- generic [ref=e364]:
- generic [ref=e365]: Reduce el contenido CSS que no se use
- text: —Ahorro estimado de 11 KiB
- group [ref=e372]:
- generic [ref=e378] [cursor=pointer]:
- text: Los elementos de imagen no tienen
- code [ref=e379]: width
- text: "y"
- code [ref=e380]: height
- text: explícitos
- group [ref=e387]:
- 'generic "Evita cargas útiles de red de gran tamaño —Tamaño total: 3085 KiB" [ref=e388] [cursor=pointer]':
- generic [ref=e391]:
- generic [ref=e392]: Evita cargas útiles de red de gran tamaño
- text: "—Tamaño total: 3085 KiB"
- group [ref=e399]:
- generic "Evita las animaciones no compuestas —2 elementos animados encontrados" [ref=e400] [cursor=pointer]:
- generic [ref=e403]:
- generic [ref=e404]: Evita las animaciones no compuestas
- text: —2 elementos animados encontrados
- generic [ref=e410]:
- text: Consulta más información sobre el rendimiento de tu aplicación. Estos datos no
- link "afectan directamente" [ref=e411] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: a la puntuación del rendimiento.
- group [ref=e413]:
- generic "Auditorías aprobadas (16) Mostrar" [ref=e414] [cursor=pointer]:
- generic [ref=e415]:
- generic [ref=e416]: Auditorías aprobadas (16)
- generic [ref=e417]: Mostrar
- text: — —
- generic [ref=e419]:
- generic [ref=e420]:
- heading "96 Accesibilidad" [level=2] [ref=e421]:
- generic [ref=e422]:
- generic [ref=e427]: "96"
- generic [ref=e428]: Accesibilidad
- generic [ref=e430]:
- text: Estas comprobaciones permiten identificar oportunidades para
- link "mejorar la accesibilidad de tu aplicación web" [ref=e431] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/accessibility/?utm_source=lighthouse&utm_medium=lr
- text: . La detección automática solo puede detectar un subconjunto de problemas y no garantiza la accesibilidad de tu aplicación web, por lo que también te recomendamos que hagas
- link "pruebas manuales" [ref=e432] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: .
- generic [ref=e433]:
- generic [ref=e434]:
- generic [ref=e435]: Contraste
- group [ref=e437]:
- generic "Los colores de fondo y de primer plano no tienen una relación de contraste adecuada." [ref=e438] [cursor=pointer]
- generic [ref=e657]:
- text: Los textos con poco contraste resultan difíciles o imposibles de leer para muchos usuarios.
- link "Consulta cómo crear suficiente contraste de color" [ref=e658] [cursor=pointer]:
- /url: https://dequeuniversity.com/rules/axe/4.12/color-contrast
- table [ref=e659]:
- rowgroup [ref=e660]:
- row [ref=e661]:
- columnheader "Elementos con errores" [ref=e662]
- rowgroup [ref=e664]:
- row [ref=e665]:
- cell "Excelencia culinaria · Diseño de eventos · Gastronomía de autor <p class=\"text-body-sm text-muted opacity-60\">" [ref=e666]:
- generic "footer.site-footer > div.page-wrap > div.footer-bottom > p.text-body-sm" [ref=e667]:
- generic [ref=e668]: Excelencia culinaria · Diseño de eventos · Gastronomía de autor
- generic [ref=e669]: <p class="text-body-sm text-muted opacity-60">
- row [ref=e670]:
- cell "© 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más import… <footer class=\"site-footer\">" [ref=e671]:
- generic "body.page-ready > footer.site-footer" [ref=e672]:
- generic [ref=e673]: © 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más import…
- generic [ref=e674]: <footer class="site-footer">
- generic [ref=e448]: A continuación se indican consejos para facilitar la lectura del contenido.
- generic [ref=e449]:
- generic [ref=e450]: Prácticas recomendadas
- group [ref=e452]:
- generic "Los enlaces idénticos tienen la misma finalidad." [active] [ref=e453] [cursor=pointer]
- generic [ref=e675]:
- generic [ref=e676]:
- text: Los enlaces con el mismo destino deben tener la misma descripción para que los usuarios puedan entender su finalidad y decidir si quieren seguirlo.
- link "Obtén más información sobre los enlaces idénticos" [ref=e677] [cursor=pointer]:
- /url: https://dequeuniversity.com/rules/axe/4.12/identical-links-same-purpose
- text: .
- generic "Esta auditoría no contribuye a la puntuación general de la categoría." [ref=e678]: Sin puntuar
- table [ref=e679]:
- rowgroup [ref=e680]:
- row [ref=e681]:
- columnheader "Elementos con errores" [ref=e682]
- rowgroup [ref=e684]:
- row [ref=e685]:
- cell "WHATSAPP <a href=\"https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20eve…\" class=\"btn btn-pill nav-wa\" target=\"_blank\" rel=\"noreferrer\" data-astro-cid-ctg3m53h=\"\">" [ref=e686]:
- generic "header.site-header > div.page-wrap > div.nav-actions > a.btn" [ref=e687]:
- generic [ref=e693]: WHATSAPP
- generic [ref=e694]: <a href="https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20eve…" class="btn btn-pill nav-wa" target="_blank" rel="noreferrer" data-astro-cid-ctg3m53h="">
- row [ref=e695]:
- cell "WhatsApp <a href=\"https://wa.me/34678171513\" class=\"footer-link\" target=\"_blank\" rel=\"noreferrer\">" [ref=e696]:
- generic "div.footer-inner > div.footer-links > div.footer-col > a.footer-link" [ref=e697]:
- generic [ref=e698]: WhatsApp
- generic [ref=e699]: <a href="https://wa.me/34678171513" class="footer-link" target="_blank" rel="noreferrer">
- generic [ref=e463]: Estos elementos destacan las prácticas recomendadas de accesibilidad más habituales.
- generic [ref=e464]:
- group [ref=e465]:
- generic "Elementos adicionales que se deben comprobar manualmente (10) Mostrar" [ref=e466] [cursor=pointer]:
- generic [ref=e467]:
- generic [ref=e468]: Elementos adicionales que se deben comprobar manualmente (10)
- generic [ref=e469]: Mostrar
- generic [ref=e470]:
- text: Estos elementos se ocupan de áreas que las herramientas de prueba automáticas no pueden analizar. Consulta más información sobre cómo
- link "revisar la accesibilidad" [ref=e471] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: en nuestra guía.
- group [ref=e473]:
- generic "Auditorías aprobadas (22) Mostrar" [ref=e474] [cursor=pointer]:
- generic [ref=e475]:
- generic [ref=e476]: Auditorías aprobadas (22)
- generic [ref=e477]: Mostrar
- group [ref=e479]:
- generic "No aplicable (39) Mostrar" [ref=e480] [cursor=pointer]:
- generic [ref=e481]:
- generic [ref=e482]: No aplicable (39)
- generic [ref=e483]: Mostrar
- generic [ref=e485]:
- heading "100 Prácticas recomendadas" [level=2] [ref=e487]:
- generic [ref=e488]:
- generic [ref=e493]: "100"
- generic [ref=e494]: Prácticas recomendadas
- generic [ref=e495]:
- generic [ref=e496]:
- generic [ref=e497]: Confianza y seguridad
- group [ref=e499]:
- generic "Asegura que la CSP sea efectiva frente a ataques XSS" [ref=e500] [cursor=pointer]
- group [ref=e511]:
- generic "Usa una política de HSTS sólida" [ref=e512] [cursor=pointer]
- group [ref=e523]:
- generic "Asegúrate de que el aislamiento de orígenes sea adecuado con COOP" [ref=e524] [cursor=pointer]
- group [ref=e535]:
- generic "Mitiga el secuestro de clics con XFO o CSP" [ref=e536] [cursor=pointer]
- group [ref=e547]:
- generic "Mitigar el XSS basado en DOM con Trusted Types" [ref=e548] [cursor=pointer]
- generic [ref=e558]:
- generic [ref=e559]: Compatibilidad con navegadores
- group [ref=e561]:
- generic "Funciones de Baseline" [ref=e562] [cursor=pointer]
- group [ref=e573]:
- generic "Auditorías aprobadas (13) Mostrar" [ref=e574] [cursor=pointer]:
- generic [ref=e575]:
- generic [ref=e576]: Auditorías aprobadas (13)
- generic [ref=e577]: Mostrar
- group [ref=e579]:
- generic "No aplicable (2) Mostrar" [ref=e580] [cursor=pointer]:
- generic [ref=e581]:
- generic [ref=e582]: No aplicable (2)
- generic [ref=e583]: Mostrar
- generic [ref=e585]:
- generic [ref=e586]:
- heading "100 SEO" [level=2] [ref=e587]:
- generic [ref=e588]:
- generic [ref=e593]: "100"
- generic [ref=e594]: SEO
- generic [ref=e596]:
- text: Estas comprobaciones aseguran que tu página siga las recomendaciones básicas sobre optimización en buscadores. Hay muchos otros factores adicionales que Lighthouse no valora aquí y que pueden afectar a tu posicionamiento en las búsquedas, como el rendimiento en las
- link "Métricas web principales" [ref=e597] [cursor=pointer]:
- /url: https://web.dev/explore/vitals?utm_source=lighthouse&utm_medium=lr
- text: .
- link "Consulta más información sobre las Directrices básicas de la Búsqueda de Google" [ref=e598] [cursor=pointer]:
- /url: https://support.google.com/webmasters/answer/35769
- text: .
- generic [ref=e599]:
- group [ref=e600]:
- generic "Elementos adicionales que se deben comprobar manualmente (1) Ocultar" [ref=e601] [cursor=pointer]:
- generic [ref=e602]:
- generic [ref=e603]: Elementos adicionales que se deben comprobar manualmente (1)
- generic [ref=e604]: Ocultar
- group [ref=e607]:
- generic "Los datos estructurados son válidos" [ref=e608] [cursor=pointer]
- generic [ref=e618]: Ejecuta estos validadores adicionales en tu sitio web para comprobar más prácticas recomendadas de SEO.
- group [ref=e620]:
- generic "Auditorías aprobadas (8) Mostrar" [ref=e621] [cursor=pointer]:
- generic [ref=e622]:
- generic [ref=e623]: Auditorías aprobadas (8)
- generic [ref=e624]: Mostrar
- group [ref=e626]:
- generic "No aplicable (2) Mostrar" [ref=e627] [cursor=pointer]:
- generic [ref=e628]:
- generic [ref=e629]: No aplicable (2)
- generic [ref=e630]: Mostrar
- generic [ref=e632]:
- generic [ref=e633]:
- heading "2/2 Navegación agéntica" [level=2] [ref=e634]:
- generic [ref=e635]:
- generic [ref=e636]: 2/2
- generic [ref=e640]: Navegación agéntica
- generic [ref=e642]:
- text: Estas comprobaciones aseguran unos
- link "sitios web de alta calidad en los que los agentes de IA puedan navegar" [ref=e643] [cursor=pointer]:
- /url: https://goo.gle/lighthouse-agentic-web
- text: ", y validan que las integraciones de WebMCP sean correctas. Esta categoría aún está en desarrollo y puede cambiar."
- group [ref=e645]:
- generic "Auditorías aprobadas (2) Mostrar" [ref=e646] [cursor=pointer]:
- generic [ref=e647]:
- generic [ref=e648]: Auditorías aprobadas (2)
- generic [ref=e649]: Mostrar
- text: — —
- group [ref=e651]:
- generic "No aplicable (4) Mostrar" [ref=e652] [cursor=pointer]:
- generic [ref=e653]:
- generic [ref=e654]: No aplicable (4)
- generic [ref=e655]: Mostrar
- contentinfo [ref=e84]:
- generic [ref=e85]:
- generic [ref=e86]:
- generic [ref=e87]:
- generic [ref=e88]: Más información en PageSpeed Insights
- link "Novedades" [ref=e90] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/release_notes
- link "Documentación" [ref=e92] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- link "Más información sobre el rendimiento web" [ref=e94] [cursor=pointer]:
- /url: https://developers.google.com/speed
- link "Haz preguntas en Stack Overflow" [ref=e96] [cursor=pointer]:
- /url: https://stackoverflow.com/questions/tagged/pagespeed-insights
- link "Lista de distribución" [ref=e98] [cursor=pointer]:
- /url: https://groups.google.com/g/pagespeed-insights-discuss
- generic [ref=e99]:
- generic [ref=e100]: Contenido relacionado
- link "Actualizaciones" [ref=e102] [cursor=pointer]:
- /url: https://developer.chrome.com/blog
- link "Aspectos básicos de la Web" [ref=e104] [cursor=pointer]:
- /url: https://developers.google.com/focus/web-development
- link "Casos de éxito" [ref=e106] [cursor=pointer]:
- /url: https://web.dev/case-studies
- link "Pódcasts" [ref=e108] [cursor=pointer]:
- /url: https://web.dev/shows
- generic [ref=e109]:
- generic [ref=e110]: Contacto
- link "Twitter" [ref=e112] [cursor=pointer]:
- /url: https://twitter.com/ChromiumDev
- link "YouTube" [ref=e114] [cursor=pointer]:
- /url: https://www.youtube.com/user/ChromeDevelopers
- generic [ref=e115]:
- link [ref=e116] [cursor=pointer]:
- /url: https://developers.google.com/
- img "Google Developers Logo" [ref=e117]
- link "Chrome" [ref=e118] [cursor=pointer]:
- /url: https://developer.chrome.com/
- link "Firebase" [ref=e119] [cursor=pointer]:
- /url: https://firebase.google.com/
- link "Todos los productos" [ref=e120] [cursor=pointer]:
- /url: https://developers.google.com/products/
- generic [ref=e121]:
- link "Política de Términos y Privacidad" [ref=e123] [cursor=pointer]:
- /url: https://policies.google.com/
- generic [ref=e124]:
- text: Para obtener más información, consulta las
- link "Políticas del Sitio Google Developers" [ref=e125] [cursor=pointer]:
- /url: https://developers.google.com/terms/site-policies
- text: .
@@ -0,0 +1,390 @@
- generic [ref=f1e1]:
- banner [ref=f1e2]:
- link "PageSpeed Insights logo PageSpeed Insights" [ref=f1e3] [cursor=pointer]:
- /url: ./
- img "PageSpeed Insights logo" [ref=f1e4]
- generic [ref=f1e5]: PageSpeed Insights
- generic [ref=f1e6]:
- button "Copiar enlace" [ref=f1e8]
- generic [ref=f1e16]:
- generic [ref=f1e18]: Documentos
- link "Documentos" [ref=f1e19] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- generic [ref=f1e26]:
- generic [ref=f1e27]:
- generic [ref=f1e28]: Este sitio usa cookies de Google para ofrecer sus servicios y analizar el tráfico.
- generic [ref=f1e29]:
- generic [ref=f1e31]:
- generic [ref=f1e33]: Más información
- link "Más información" [ref=f1e34] [cursor=pointer]:
- /url: https://policies.google.com/technologies/cookies
- button "Entendido" [ref=f1e36]
- generic [ref=f1e40]: Informe del 20 jul 2026, 14:43:03
- generic [ref=f1e41]:
- generic [ref=f1e42]:
- textbox [active] [ref=f1e44]:
- /placeholder: Escribe la URL de una página web
- text: https://mnq.elkazurrotaberna.es/
- paragraph [ref=f1e46]: Introduce una URL válida
- button "Analizar" [ref=f1e48]
- generic [ref=f1e54]:
- tablist [ref=f1e55]:
- generic [ref=f1e58]:
- tab "Móvil" [selected] [ref=f1e59] [cursor=pointer]:
- generic:
- generic: smartphone
- generic: Móvil
- tab "Ordenador" [ref=f1e61] [cursor=pointer]:
- generic:
- generic: computer
- generic: Ordenador
- tabpanel "Móvil" [ref=f1e63]:
- generic [ref=f1e65]:
- generic [ref=f1e67]:
- generic [ref=f1e68]:
- generic [ref=f1e69]: Descubre lo que experimentan tus usuarios reales
- generic [ref=f1e71]:
- button "button" [ref=f1e73] [cursor=pointer]
- generic [ref=f1e77]: No hay datos
- separator [ref=f1e78]
- generic [ref=f1e79]:
- generic [ref=f1e80]: Diagnostica problemas de rendimiento
- article [ref=f1e86]:
- generic [ref=f1e87]:
- generic [ref=f1e92]:
- link "82 Rendimiento" [ref=f1e93] [cursor=pointer]:
- /url: "#performance"
- generic [ref=f1e98]: "82"
- generic [ref=f1e99]: Rendimiento
- link "100 Accesibilidad" [ref=f1e100] [cursor=pointer]:
- /url: "#accessibility"
- generic [ref=f1e105]: "100"
- generic [ref=f1e106]: Accesibilidad
- link "100 Prácticas recomendadas" [ref=f1e107] [cursor=pointer]:
- /url: "#best-practices"
- generic [ref=f1e112]: "100"
- generic [ref=f1e113]: Prácticas recomendadas
- link "100 SEO" [ref=f1e114] [cursor=pointer]:
- /url: "#seo"
- generic [ref=f1e119]: "100"
- generic [ref=f1e120]: SEO
- link "2/3 Navegación agéntica" [ref=f1e121] [cursor=pointer]:
- /url: "#agentic-browsing"
- generic [ref=f1e122]: 2/3
- generic [ref=f1e126]: Navegación agéntica
- generic [ref=f1e128]:
- generic [ref=f1e130]:
- generic [ref=f1e131]:
- generic [ref=f1e132]:
- img [ref=f1e136]:
- generic [ref=f1e137]: "82"
- generic [ref=f1e142]:
- generic:
- generic: FCP
- generic: "+6"
- generic:
- generic: LCP
- generic: "+14"
- generic:
- generic: TBT
- generic: "+30"
- generic:
- generic: CLS
- generic: "+25"
- generic:
- generic: SI
- generic: "+8"
- generic [ref=f1e144]: Rendimiento
- generic [ref=f1e146]:
- generic [ref=f1e147]:
- text: Los valores son estimaciones y pueden variar. La
- link "puntuación del rendimiento se calcula" [ref=f1e148] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: directamente a partir de estas métricas.
- link "Ver calculadora." [ref=f1e149] [cursor=pointer]:
- /url: https://googlechrome.github.io/lighthouse/scorecalc/#FCP=2714&LCP=3759&TBT=0&CLS=0&SI=4327&TTI=3759&device=mobile&version=13.4.0
- generic [ref=f1e151]:
- generic [ref=f1e152]: 0–49
- generic [ref=f1e153]: 50–89
- generic [ref=f1e154]: 90–100
- img "Final Screenshot" [ref=f1e157]
- generic [ref=f1e158]:
- checkbox "Toggle the display of metric descriptions" [ref=f1e159]
- generic [ref=f1e160]:
- generic [ref=f1e161]: Métricas
- generic [ref=f1e162] [cursor=pointer]: Ampliar vista
- generic [ref=f1e163]:
- generic [ref=f1e165]:
- generic [ref=f1e167]: First Contentful Paint
- generic [ref=f1e168]: 2,7 s
- generic [ref=f1e170]:
- generic [ref=f1e172]: Renderizado del mayor elemento con contenido
- generic [ref=f1e173]: 3,8 s
- generic [ref=f1e175]:
- generic [ref=f1e177]: Total Blocking Time
- generic [ref=f1e178]: 0 ms
- generic [ref=f1e180]:
- generic [ref=f1e182]: Cambios de diseño acumulados
- generic [ref=f1e183]: "0"
- generic [ref=f1e185]:
- generic [ref=f1e187]: Speed Index
- generic [ref=f1e188]: 4,3 s
- list [ref=f1e189]:
- listitem [ref=f1e190]: Captured at 20 jul 2026, 14:43 CEST
- listitem [ref=f1e191]: Moto G Power emulado with Lighthouse 13.4.0
- listitem [ref=f1e192]: Sesión de una sola página
- listitem [ref=f1e193]: Carga inicial de la página
- listitem [ref=f1e194]: Limitación de 4G lenta
- listitem [ref=f1e195]: Using HeadlessChromium 149.0.7827.155 with lr
- button "Ver gráfico de rectángulos" [ref=f1e197] [cursor=pointer]
- generic [ref=f1e199]:
- img "Screenshot" [ref=f1e201]
- img "Screenshot" [ref=f1e203]
- img "Screenshot" [ref=f1e205]
- img "Screenshot" [ref=f1e207]
- img "Screenshot" [ref=f1e209]
- img "Screenshot" [ref=f1e211]
- img "Screenshot" [ref=f1e213]
- img "Screenshot" [ref=f1e215]
- generic [ref=f1e216]:
- generic [ref=f1e217]:
- generic [ref=f1e218]: "Mostrar auditorías relacionadas con:"
- radio "All" [checked] [ref=f1e219]
- generic [ref=f1e220] [cursor=pointer]: All
- radio "FCP" [ref=f1e221]
- generic "First Contentful Paint" [ref=f1e222] [cursor=pointer]: FCP
- radio "LCP" [ref=f1e223]
- generic "Renderizado del mayor elemento con contenido" [ref=f1e224] [cursor=pointer]: LCP
- radio "CLS" [ref=f1e225]
- generic "Cambios de diseño acumulados" [ref=f1e226] [cursor=pointer]: CLS
- generic [ref=f1e227]:
- generic [ref=f1e228]: Estadísticas
- group [ref=f1e230]:
- generic "Solicitudes que bloquean el renderizado —Ahorro estimado de 1890 ms" [ref=f1e231] [cursor=pointer]:
- generic [ref=f1e234]:
- generic [ref=f1e235]: Solicitudes que bloquean el renderizado
- text: —Ahorro estimado de 1890 ms
- group [ref=f1e242]:
- generic "Mejorar la entrega de imágenes —Ahorro estimado de 625 KiB" [ref=f1e243] [cursor=pointer]:
- generic [ref=f1e246]:
- generic [ref=f1e247]: Mejorar la entrega de imágenes
- text: —Ahorro estimado de 625 KiB
- group [ref=f1e254]:
- generic "Redistribución forzada" [ref=f1e255] [cursor=pointer]
- group [ref=f1e266]:
- generic "Árbol de dependencia de red" [ref=f1e267] [cursor=pointer]
- group [ref=f1e278]:
- generic "Latencia de solicitud del documento —Ahorro estimado de 16 KiB" [ref=f1e279] [cursor=pointer]:
- generic [ref=f1e282]:
- generic [ref=f1e283]: Latencia de solicitud del documento
- text: —Ahorro estimado de 16 KiB
- group [ref=f1e290]:
- generic "Optimizar tamaño del DOM" [ref=f1e291] [cursor=pointer]
- group [ref=f1e302]:
- generic "Desglose de LCP" [ref=f1e303] [cursor=pointer]
- group [ref=f1e314]:
- generic "Terceros" [ref=f1e315] [cursor=pointer]
- generic [ref=f1e325]:
- text: Estas estadísticas también están disponibles en el panel Rendimiento de Chrome DevTools.
- link "Graba una traza" [ref=f1e326] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/devtools/performance/reference?utm_source=lighthouse&utm_medium=lr
- text: para ver información más detallada.
- generic [ref=f1e327]:
- generic [ref=f1e328]: Diagnósticos
- group [ref=f1e330]:
- generic "Reduce el contenido CSS que no se use —Ahorro estimado de 12 KiB" [ref=f1e331] [cursor=pointer]:
- generic [ref=f1e334]:
- generic [ref=f1e335]: Reduce el contenido CSS que no se use
- text: —Ahorro estimado de 12 KiB
- group [ref=f1e342]:
- generic "Evita las animaciones no compuestas —2 elementos animados encontrados" [ref=f1e343] [cursor=pointer]:
- generic [ref=f1e346]:
- generic [ref=f1e347]: Evita las animaciones no compuestas
- text: —2 elementos animados encontrados
- generic [ref=f1e353]:
- text: Consulta más información sobre el rendimiento de tu aplicación. Estos datos no
- link "afectan directamente" [ref=f1e354] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: a la puntuación del rendimiento.
- group [ref=f1e356]:
- generic "Auditorías aprobadas (17) Mostrar" [ref=f1e357] [cursor=pointer]:
- generic [ref=f1e358]:
- generic [ref=f1e359]: Auditorías aprobadas (17)
- generic [ref=f1e360]: Mostrar
- text: — — —
- generic [ref=f1e362]:
- generic [ref=f1e363]:
- heading "100 Accesibilidad" [level=2] [ref=f1e364]:
- generic [ref=f1e365]:
- generic [ref=f1e370]: "100"
- generic [ref=f1e371]: Accesibilidad
- generic [ref=f1e373]:
- text: Estas comprobaciones permiten identificar oportunidades para
- link "mejorar la accesibilidad de tu aplicación web" [ref=f1e374] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/accessibility/?utm_source=lighthouse&utm_medium=lr
- text: . La detección automática solo puede detectar un subconjunto de problemas y no garantiza la accesibilidad de tu aplicación web, por lo que también te recomendamos que hagas
- link "pruebas manuales" [ref=f1e375] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: .
- generic [ref=f1e377]:
- generic [ref=f1e378]: Prácticas recomendadas
- group [ref=f1e380]:
- generic "Los enlaces idénticos tienen la misma finalidad." [ref=f1e381] [cursor=pointer]
- generic [ref=f1e391]: Estos elementos destacan las prácticas recomendadas de accesibilidad más habituales.
- generic [ref=f1e392]:
- group [ref=f1e393]:
- generic "Elementos adicionales que se deben comprobar manualmente (10) Mostrar" [ref=f1e394] [cursor=pointer]:
- generic [ref=f1e395]:
- generic [ref=f1e396]: Elementos adicionales que se deben comprobar manualmente (10)
- generic [ref=f1e397]: Mostrar
- generic [ref=f1e398]:
- text: Estos elementos se ocupan de áreas que las herramientas de prueba automáticas no pueden analizar. Consulta más información sobre cómo
- link "revisar la accesibilidad" [ref=f1e399] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: en nuestra guía.
- group [ref=f1e401]:
- generic "Auditorías aprobadas (23) Mostrar" [ref=f1e402] [cursor=pointer]:
- generic [ref=f1e403]:
- generic [ref=f1e404]: Auditorías aprobadas (23)
- generic [ref=f1e405]: Mostrar
- group [ref=f1e407]:
- generic "No aplicable (39) Mostrar" [ref=f1e408] [cursor=pointer]:
- generic [ref=f1e409]:
- generic [ref=f1e410]: No aplicable (39)
- generic [ref=f1e411]: Mostrar
- generic [ref=f1e413]:
- heading "100 Prácticas recomendadas" [level=2] [ref=f1e415]:
- generic [ref=f1e416]:
- generic [ref=f1e421]: "100"
- generic [ref=f1e422]: Prácticas recomendadas
- generic [ref=f1e423]:
- generic [ref=f1e424]:
- generic [ref=f1e425]: Confianza y seguridad
- group [ref=f1e427]:
- generic "Asegura que la CSP sea efectiva frente a ataques XSS" [ref=f1e428] [cursor=pointer]
- group [ref=f1e439]:
- generic "Usa una política de HSTS sólida" [ref=f1e440] [cursor=pointer]
- group [ref=f1e451]:
- generic "Asegúrate de que el aislamiento de orígenes sea adecuado con COOP" [ref=f1e452] [cursor=pointer]
- group [ref=f1e463]:
- generic "Mitiga el secuestro de clics con XFO o CSP" [ref=f1e464] [cursor=pointer]
- group [ref=f1e475]:
- generic "Mitigar el XSS basado en DOM con Trusted Types" [ref=f1e476] [cursor=pointer]
- generic [ref=f1e486]:
- generic [ref=f1e487]: Compatibilidad con navegadores
- group [ref=f1e489]:
- generic "Funciones de Baseline" [ref=f1e490] [cursor=pointer]
- group [ref=f1e501]:
- generic "Auditorías aprobadas (13) Mostrar" [ref=f1e502] [cursor=pointer]:
- generic [ref=f1e503]:
- generic [ref=f1e504]: Auditorías aprobadas (13)
- generic [ref=f1e505]: Mostrar
- group [ref=f1e507]:
- generic "No aplicable (2) Mostrar" [ref=f1e508] [cursor=pointer]:
- generic [ref=f1e509]:
- generic [ref=f1e510]: No aplicable (2)
- generic [ref=f1e511]: Mostrar
- generic [ref=f1e513]:
- generic [ref=f1e514]:
- heading "100 SEO" [level=2] [ref=f1e515]:
- generic [ref=f1e516]:
- generic [ref=f1e521]: "100"
- generic [ref=f1e522]: SEO
- generic [ref=f1e524]:
- text: Estas comprobaciones aseguran que tu página siga las recomendaciones básicas sobre optimización en buscadores. Hay muchos otros factores adicionales que Lighthouse no valora aquí y que pueden afectar a tu posicionamiento en las búsquedas, como el rendimiento en las
- link "Métricas web principales" [ref=f1e525] [cursor=pointer]:
- /url: https://web.dev/explore/vitals?utm_source=lighthouse&utm_medium=lr
- text: .
- link "Consulta más información sobre las Directrices básicas de la Búsqueda de Google" [ref=f1e526] [cursor=pointer]:
- /url: https://support.google.com/webmasters/answer/35769
- text: .
- generic [ref=f1e527]:
- group [ref=f1e528]:
- generic "Elementos adicionales que se deben comprobar manualmente (1) Ocultar" [ref=f1e529] [cursor=pointer]:
- generic [ref=f1e530]:
- generic [ref=f1e531]: Elementos adicionales que se deben comprobar manualmente (1)
- generic [ref=f1e532]: Ocultar
- group [ref=f1e535]:
- generic "Los datos estructurados son válidos" [ref=f1e536] [cursor=pointer]
- generic [ref=f1e546]: Ejecuta estos validadores adicionales en tu sitio web para comprobar más prácticas recomendadas de SEO.
- group [ref=f1e548]:
- generic "Auditorías aprobadas (10) Mostrar" [ref=f1e549] [cursor=pointer]:
- generic [ref=f1e550]:
- generic [ref=f1e551]: Auditorías aprobadas (10)
- generic [ref=f1e552]: Mostrar
- generic [ref=f1e554]:
- generic [ref=f1e555]:
- heading "2/3 Navegación agéntica" [level=2] [ref=f1e556]:
- generic [ref=f1e557]:
- generic [ref=f1e558]: 2/3
- generic [ref=f1e562]: Navegación agéntica
- generic [ref=f1e564]:
- text: Estas comprobaciones aseguran unos
- link "sitios web de alta calidad en los que los agentes de IA puedan navegar" [ref=f1e565] [cursor=pointer]:
- /url: https://goo.gle/lighthouse-agentic-web
- text: ", y validan que las integraciones de WebMCP sean correctas. Esta categoría aún está en desarrollo y puede cambiar."
- generic [ref=f1e567]:
- generic [ref=f1e568]: Accesibilidad del agente
- group [ref=f1e570]:
- generic "llms.txt no sigue las recomendaciones" [ref=f1e571] [cursor=pointer]
- generic [ref=f1e581]: Estas auditorías destacan las prácticas recomendadas para mejorar la accesibilidad del sitio web para los agentes de IA.
- group [ref=f1e583]:
- generic "Auditorías aprobadas (2) Mostrar" [ref=f1e584] [cursor=pointer]:
- generic [ref=f1e585]:
- generic [ref=f1e586]: Auditorías aprobadas (2)
- generic [ref=f1e587]: Mostrar
- text: — —
- group [ref=f1e589]:
- generic "No aplicable (3) Mostrar" [ref=f1e590] [cursor=pointer]:
- generic [ref=f1e591]:
- generic [ref=f1e592]: No aplicable (3)
- generic [ref=f1e593]: Mostrar
- contentinfo [ref=f1e594]:
- generic [ref=f1e595]:
- generic [ref=f1e596]:
- generic [ref=f1e597]:
- generic [ref=f1e598]: Más información en PageSpeed Insights
- link "Novedades" [ref=f1e600] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/release_notes
- link "Documentación" [ref=f1e602] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- link "Más información sobre el rendimiento web" [ref=f1e604] [cursor=pointer]:
- /url: https://developers.google.com/speed
- link "Haz preguntas en Stack Overflow" [ref=f1e606] [cursor=pointer]:
- /url: https://stackoverflow.com/questions/tagged/pagespeed-insights
- link "Lista de distribución" [ref=f1e608] [cursor=pointer]:
- /url: https://groups.google.com/g/pagespeed-insights-discuss
- generic [ref=f1e609]:
- generic [ref=f1e610]: Contenido relacionado
- link "Actualizaciones" [ref=f1e612] [cursor=pointer]:
- /url: https://developer.chrome.com/blog
- link "Aspectos básicos de la Web" [ref=f1e614] [cursor=pointer]:
- /url: https://developers.google.com/focus/web-development
- link "Casos de éxito" [ref=f1e616] [cursor=pointer]:
- /url: https://web.dev/case-studies
- link "Pódcasts" [ref=f1e618] [cursor=pointer]:
- /url: https://web.dev/shows
- generic [ref=f1e619]:
- generic [ref=f1e620]: Contacto
- link "Twitter" [ref=f1e622] [cursor=pointer]:
- /url: https://twitter.com/ChromiumDev
- link "YouTube" [ref=f1e624] [cursor=pointer]:
- /url: https://www.youtube.com/user/ChromeDevelopers
- generic [ref=f1e625]:
- link [ref=f1e626] [cursor=pointer]:
- /url: https://developers.google.com/
- img "Google Developers Logo" [ref=f1e627]
- link "Chrome" [ref=f1e628] [cursor=pointer]:
- /url: https://developer.chrome.com/
- link "Firebase" [ref=f1e629] [cursor=pointer]:
- /url: https://firebase.google.com/
- link "Todos los productos" [ref=f1e630] [cursor=pointer]:
- /url: https://developers.google.com/products/
- generic [ref=f1e631]:
- link "Política de Términos y Privacidad" [ref=f1e633] [cursor=pointer]:
- /url: https://policies.google.com/
- generic [ref=f1e634]:
- text: Para obtener más información, consulta las
- link "Políticas del Sitio Google Developers" [ref=f1e635] [cursor=pointer]:
- /url: https://developers.google.com/terms/site-policies
- text: .
@@ -0,0 +1,390 @@
- generic [ref=f2e1]:
- banner [ref=f2e2]:
- link "PageSpeed Insights logo PageSpeed Insights" [ref=f2e3] [cursor=pointer]:
- /url: ./
- img "PageSpeed Insights logo" [ref=f2e4]
- generic [ref=f2e5]: PageSpeed Insights
- generic [ref=f2e6]:
- button "Copiar enlace" [ref=f2e8]
- generic [ref=f2e16]:
- generic [ref=f2e18]: Documentos
- link "Documentos" [ref=f2e19] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- generic [ref=f2e26]:
- generic [ref=f2e27]:
- generic [ref=f2e28]: Este sitio usa cookies de Google para ofrecer sus servicios y analizar el tráfico.
- generic [ref=f2e29]:
- generic [ref=f2e31]:
- generic [ref=f2e33]: Más información
- link "Más información" [ref=f2e34] [cursor=pointer]:
- /url: https://policies.google.com/technologies/cookies
- button "Entendido" [ref=f2e36]
- generic [ref=f2e40]: Informe del 20 jul 2026, 17:18:18
- generic [ref=f2e41]:
- generic [ref=f2e42]:
- textbox [active] [ref=f2e44]:
- /placeholder: Escribe la URL de una página web
- text: https://mnq.elkazurrotaberna.es/
- paragraph [ref=f2e46]: Introduce una URL válida
- button "Analizar" [ref=f2e48]
- generic [ref=f2e54]:
- tablist [ref=f2e55]:
- generic [ref=f2e58]:
- tab "Móvil" [selected] [ref=f2e59] [cursor=pointer]:
- generic:
- generic: smartphone
- generic: Móvil
- tab "Ordenador" [ref=f2e61] [cursor=pointer]:
- generic:
- generic: computer
- generic: Ordenador
- tabpanel "Móvil" [ref=f2e63]:
- generic [ref=f2e65]:
- generic [ref=f2e67]:
- generic [ref=f2e68]:
- generic [ref=f2e69]: Descubre lo que experimentan tus usuarios reales
- generic [ref=f2e71]:
- button "button" [ref=f2e73] [cursor=pointer]
- generic [ref=f2e77]: No hay datos
- separator [ref=f2e78]
- generic [ref=f2e79]:
- generic [ref=f2e80]: Diagnostica problemas de rendimiento
- article [ref=f2e86]:
- generic [ref=f2e87]:
- generic [ref=f2e92]:
- link "88 Rendimiento" [ref=f2e93] [cursor=pointer]:
- /url: "#performance"
- generic [ref=f2e98]: "88"
- generic [ref=f2e99]: Rendimiento
- link "100 Accesibilidad" [ref=f2e100] [cursor=pointer]:
- /url: "#accessibility"
- generic [ref=f2e105]: "100"
- generic [ref=f2e106]: Accesibilidad
- link "100 Prácticas recomendadas" [ref=f2e107] [cursor=pointer]:
- /url: "#best-practices"
- generic [ref=f2e112]: "100"
- generic [ref=f2e113]: Prácticas recomendadas
- link "100 SEO" [ref=f2e114] [cursor=pointer]:
- /url: "#seo"
- generic [ref=f2e119]: "100"
- generic [ref=f2e120]: SEO
- link "2/3 Navegación agéntica" [ref=f2e121] [cursor=pointer]:
- /url: "#agentic-browsing"
- generic [ref=f2e122]: 2/3
- generic [ref=f2e126]: Navegación agéntica
- generic [ref=f2e128]:
- generic [ref=f2e130]:
- generic [ref=f2e131]:
- generic [ref=f2e132]:
- img [ref=f2e136]:
- generic [ref=f2e137]: "88"
- generic [ref=f2e142]:
- generic:
- generic: FCP
- generic: "+6"
- generic:
- generic: LCP
- generic: "+17"
- generic:
- generic: TBT
- generic: "+30"
- generic:
- generic: CLS
- generic: "+25"
- generic:
- generic: SI
- generic: "+10"
- generic [ref=f2e144]: Rendimiento
- generic [ref=f2e146]:
- generic [ref=f2e147]:
- text: Los valores son estimaciones y pueden variar. La
- link "puntuación del rendimiento se calcula" [ref=f2e148] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: directamente a partir de estas métricas.
- link "Ver calculadora." [ref=f2e149] [cursor=pointer]:
- /url: https://googlechrome.github.io/lighthouse/scorecalc/#FCP=2706&LCP=3302&TBT=0&CLS=0&SI=2706&TTI=3302&device=mobile&version=13.4.0
- generic [ref=f2e151]:
- generic [ref=f2e152]: 0–49
- generic [ref=f2e153]: 50–89
- generic [ref=f2e154]: 90–100
- img "Final Screenshot" [ref=f2e157]
- generic [ref=f2e158]:
- checkbox "Toggle the display of metric descriptions" [ref=f2e159]
- generic [ref=f2e160]:
- generic [ref=f2e161]: Métricas
- generic [ref=f2e162] [cursor=pointer]: Ampliar vista
- generic [ref=f2e163]:
- generic [ref=f2e165]:
- generic [ref=f2e167]: First Contentful Paint
- generic [ref=f2e168]: 2,7 s
- generic [ref=f2e170]:
- generic [ref=f2e172]: Renderizado del mayor elemento con contenido
- generic [ref=f2e173]: 3,3 s
- generic [ref=f2e175]:
- generic [ref=f2e177]: Total Blocking Time
- generic [ref=f2e178]: 0 ms
- generic [ref=f2e180]:
- generic [ref=f2e182]: Cambios de diseño acumulados
- generic [ref=f2e183]: "0.003"
- generic [ref=f2e185]:
- generic [ref=f2e187]: Speed Index
- generic [ref=f2e188]: 2,7 s
- list [ref=f2e189]:
- listitem [ref=f2e190]: Captured at 20 jul 2026, 17:18 CEST
- listitem [ref=f2e191]: Moto G Power emulado with Lighthouse 13.4.0
- listitem [ref=f2e192]: Sesión de una sola página
- listitem [ref=f2e193]: Carga inicial de la página
- listitem [ref=f2e194]: Limitación de 4G lenta
- listitem [ref=f2e195]: Using HeadlessChromium 149.0.7827.155 with lr
- button "Ver gráfico de rectángulos" [ref=f2e197] [cursor=pointer]
- generic [ref=f2e199]:
- img "Screenshot" [ref=f2e201]
- img "Screenshot" [ref=f2e203]
- img "Screenshot" [ref=f2e205]
- img "Screenshot" [ref=f2e207]
- img "Screenshot" [ref=f2e209]
- img "Screenshot" [ref=f2e211]
- img "Screenshot" [ref=f2e213]
- img "Screenshot" [ref=f2e215]
- generic [ref=f2e216]:
- generic [ref=f2e217]:
- generic [ref=f2e218]: "Mostrar auditorías relacionadas con:"
- radio "All" [checked] [ref=f2e219]
- generic [ref=f2e220] [cursor=pointer]: All
- radio "FCP" [ref=f2e221]
- generic "First Contentful Paint" [ref=f2e222] [cursor=pointer]: FCP
- radio "LCP" [ref=f2e223]
- generic "Renderizado del mayor elemento con contenido" [ref=f2e224] [cursor=pointer]: LCP
- radio "TBT" [ref=f2e225]
- generic "Total Blocking Time" [ref=f2e226] [cursor=pointer]: TBT
- radio "CLS" [ref=f2e227]
- generic "Cambios de diseño acumulados" [ref=f2e228] [cursor=pointer]: CLS
- generic [ref=f2e229]:
- generic [ref=f2e230]: Estadísticas
- group [ref=f2e232]:
- generic "Mejorar la entrega de imágenes —Ahorro estimado de 535 KiB" [ref=f2e233] [cursor=pointer]:
- generic [ref=f2e236]:
- generic [ref=f2e237]: Mejorar la entrega de imágenes
- text: —Ahorro estimado de 535 KiB
- group [ref=f2e244]:
- generic "Árbol de dependencia de red" [ref=f2e245] [cursor=pointer]
- group [ref=f2e256]:
- generic "Latencia de solicitud del documento —Ahorro estimado de 16 KiB" [ref=f2e257] [cursor=pointer]:
- generic [ref=f2e260]:
- generic [ref=f2e261]: Latencia de solicitud del documento
- text: —Ahorro estimado de 16 KiB
- group [ref=f2e268]:
- generic "Solicitudes que bloquean el renderizado" [ref=f2e269] [cursor=pointer]
- group [ref=f2e280]:
- generic "Causantes de los cambios de diseño" [ref=f2e281] [cursor=pointer]
- group [ref=f2e292]:
- generic "Optimizar tamaño del DOM" [ref=f2e293] [cursor=pointer]
- group [ref=f2e304]:
- generic "Desglose de LCP" [ref=f2e305] [cursor=pointer]
- group [ref=f2e316]:
- generic "Terceros" [ref=f2e317] [cursor=pointer]
- generic [ref=f2e327]:
- text: Estas estadísticas también están disponibles en el panel Rendimiento de Chrome DevTools.
- link "Graba una traza" [ref=f2e328] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/devtools/performance/reference?utm_source=lighthouse&utm_medium=lr
- text: para ver información más detallada.
- generic [ref=f2e329]:
- generic [ref=f2e330]: Diagnósticos
- group [ref=f2e332]:
- generic "Reduce el contenido CSS que no se use —Ahorro estimado de 12 KiB" [ref=f2e333] [cursor=pointer]:
- generic [ref=f2e336]:
- generic [ref=f2e337]: Reduce el contenido CSS que no se use
- text: —Ahorro estimado de 12 KiB
- group [ref=f2e344]:
- generic "Evita tareas largas del hilo principal —1 tarea larga encontrada" [ref=f2e345] [cursor=pointer]:
- generic [ref=f2e348]:
- generic [ref=f2e349]: Evita tareas largas del hilo principal
- text: —1 tarea larga encontrada
- generic [ref=f2e355]:
- text: Consulta más información sobre el rendimiento de tu aplicación. Estos datos no
- link "afectan directamente" [ref=f2e356] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/?utm_source=lighthouse&utm_medium=lr
- text: a la puntuación del rendimiento.
- group [ref=f2e358]:
- generic "Auditorías aprobadas (17) Mostrar" [ref=f2e359] [cursor=pointer]:
- generic [ref=f2e360]:
- generic [ref=f2e361]: Auditorías aprobadas (17)
- generic [ref=f2e362]: Mostrar
- text: — — —
- generic [ref=f2e364]:
- generic [ref=f2e365]:
- heading "100 Accesibilidad" [level=2] [ref=f2e366]:
- generic [ref=f2e367]:
- generic [ref=f2e372]: "100"
- generic [ref=f2e373]: Accesibilidad
- generic [ref=f2e375]:
- text: Estas comprobaciones permiten identificar oportunidades para
- link "mejorar la accesibilidad de tu aplicación web" [ref=f2e376] [cursor=pointer]:
- /url: https://developer.chrome.com/docs/lighthouse/accessibility/?utm_source=lighthouse&utm_medium=lr
- text: . La detección automática solo puede detectar un subconjunto de problemas y no garantiza la accesibilidad de tu aplicación web, por lo que también te recomendamos que hagas
- link "pruebas manuales" [ref=f2e377] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: .
- generic [ref=f2e379]:
- generic [ref=f2e380]: Prácticas recomendadas
- group [ref=f2e382]:
- generic "Los enlaces idénticos tienen la misma finalidad." [ref=f2e383] [cursor=pointer]
- generic [ref=f2e393]: Estos elementos destacan las prácticas recomendadas de accesibilidad más habituales.
- generic [ref=f2e394]:
- group [ref=f2e395]:
- generic "Elementos adicionales que se deben comprobar manualmente (10) Mostrar" [ref=f2e396] [cursor=pointer]:
- generic [ref=f2e397]:
- generic [ref=f2e398]: Elementos adicionales que se deben comprobar manualmente (10)
- generic [ref=f2e399]: Mostrar
- generic [ref=f2e400]:
- text: Estos elementos se ocupan de áreas que las herramientas de prueba automáticas no pueden analizar. Consulta más información sobre cómo
- link "revisar la accesibilidad" [ref=f2e401] [cursor=pointer]:
- /url: https://web.dev/articles/how-to-review?utm_source=lighthouse&utm_medium=lr
- text: en nuestra guía.
- group [ref=f2e403]:
- generic "Auditorías aprobadas (23) Mostrar" [ref=f2e404] [cursor=pointer]:
- generic [ref=f2e405]:
- generic [ref=f2e406]: Auditorías aprobadas (23)
- generic [ref=f2e407]: Mostrar
- group [ref=f2e409]:
- generic "No aplicable (39) Mostrar" [ref=f2e410] [cursor=pointer]:
- generic [ref=f2e411]:
- generic [ref=f2e412]: No aplicable (39)
- generic [ref=f2e413]: Mostrar
- generic [ref=f2e415]:
- heading "100 Prácticas recomendadas" [level=2] [ref=f2e417]:
- generic [ref=f2e418]:
- generic [ref=f2e423]: "100"
- generic [ref=f2e424]: Prácticas recomendadas
- generic [ref=f2e425]:
- generic [ref=f2e426]:
- generic [ref=f2e427]: Confianza y seguridad
- group [ref=f2e429]:
- generic "Asegura que la CSP sea efectiva frente a ataques XSS" [ref=f2e430] [cursor=pointer]
- group [ref=f2e441]:
- generic "Usa una política de HSTS sólida" [ref=f2e442] [cursor=pointer]
- group [ref=f2e453]:
- generic "Asegúrate de que el aislamiento de orígenes sea adecuado con COOP" [ref=f2e454] [cursor=pointer]
- group [ref=f2e465]:
- generic "Mitiga el secuestro de clics con XFO o CSP" [ref=f2e466] [cursor=pointer]
- group [ref=f2e477]:
- generic "Mitigar el XSS basado en DOM con Trusted Types" [ref=f2e478] [cursor=pointer]
- generic [ref=f2e488]:
- generic [ref=f2e489]: Compatibilidad con navegadores
- group [ref=f2e491]:
- generic "Funciones de Baseline" [ref=f2e492] [cursor=pointer]
- group [ref=f2e503]:
- generic "Auditorías aprobadas (13) Mostrar" [ref=f2e504] [cursor=pointer]:
- generic [ref=f2e505]:
- generic [ref=f2e506]: Auditorías aprobadas (13)
- generic [ref=f2e507]: Mostrar
- group [ref=f2e509]:
- generic "No aplicable (2) Mostrar" [ref=f2e510] [cursor=pointer]:
- generic [ref=f2e511]:
- generic [ref=f2e512]: No aplicable (2)
- generic [ref=f2e513]: Mostrar
- generic [ref=f2e515]:
- generic [ref=f2e516]:
- heading "100 SEO" [level=2] [ref=f2e517]:
- generic [ref=f2e518]:
- generic [ref=f2e523]: "100"
- generic [ref=f2e524]: SEO
- generic [ref=f2e526]:
- text: Estas comprobaciones aseguran que tu página siga las recomendaciones básicas sobre optimización en buscadores. Hay muchos otros factores adicionales que Lighthouse no valora aquí y que pueden afectar a tu posicionamiento en las búsquedas, como el rendimiento en las
- link "Métricas web principales" [ref=f2e527] [cursor=pointer]:
- /url: https://web.dev/explore/vitals?utm_source=lighthouse&utm_medium=lr
- text: .
- link "Consulta más información sobre las Directrices básicas de la Búsqueda de Google" [ref=f2e528] [cursor=pointer]:
- /url: https://support.google.com/webmasters/answer/35769
- text: .
- generic [ref=f2e529]:
- group [ref=f2e530]:
- generic "Elementos adicionales que se deben comprobar manualmente (1) Ocultar" [ref=f2e531] [cursor=pointer]:
- generic [ref=f2e532]:
- generic [ref=f2e533]: Elementos adicionales que se deben comprobar manualmente (1)
- generic [ref=f2e534]: Ocultar
- group [ref=f2e537]:
- generic "Los datos estructurados son válidos" [ref=f2e538] [cursor=pointer]
- generic [ref=f2e548]: Ejecuta estos validadores adicionales en tu sitio web para comprobar más prácticas recomendadas de SEO.
- group [ref=f2e550]:
- generic "Auditorías aprobadas (10) Mostrar" [ref=f2e551] [cursor=pointer]:
- generic [ref=f2e552]:
- generic [ref=f2e553]: Auditorías aprobadas (10)
- generic [ref=f2e554]: Mostrar
- generic [ref=f2e556]:
- generic [ref=f2e557]:
- heading "2/3 Navegación agéntica" [level=2] [ref=f2e558]:
- generic [ref=f2e559]:
- generic [ref=f2e560]: 2/3
- generic [ref=f2e564]: Navegación agéntica
- generic [ref=f2e566]:
- text: Estas comprobaciones aseguran unos
- link "sitios web de alta calidad en los que los agentes de IA puedan navegar" [ref=f2e567] [cursor=pointer]:
- /url: https://goo.gle/lighthouse-agentic-web
- text: ", y validan que las integraciones de WebMCP sean correctas. Esta categoría aún está en desarrollo y puede cambiar."
- generic [ref=f2e569]:
- generic [ref=f2e570]: Accesibilidad del agente
- group [ref=f2e572]:
- generic "llms.txt no sigue las recomendaciones" [ref=f2e573] [cursor=pointer]
- generic [ref=f2e583]: Estas auditorías destacan las prácticas recomendadas para mejorar la accesibilidad del sitio web para los agentes de IA.
- group [ref=f2e585]:
- generic "Auditorías aprobadas (2) Mostrar" [ref=f2e586] [cursor=pointer]:
- generic [ref=f2e587]:
- generic [ref=f2e588]: Auditorías aprobadas (2)
- generic [ref=f2e589]: Mostrar
- text: — —
- group [ref=f2e591]:
- generic "No aplicable (3) Mostrar" [ref=f2e592] [cursor=pointer]:
- generic [ref=f2e593]:
- generic [ref=f2e594]: No aplicable (3)
- generic [ref=f2e595]: Mostrar
- text: — — — — — — —
- contentinfo [ref=f2e596]:
- generic [ref=f2e597]:
- generic [ref=f2e598]:
- generic [ref=f2e599]:
- generic [ref=f2e600]: Más información en PageSpeed Insights
- link "Novedades" [ref=f2e602] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/release_notes
- link "Documentación" [ref=f2e604] [cursor=pointer]:
- /url: https://developers.google.com/speed/docs/insights/v5/about
- link "Más información sobre el rendimiento web" [ref=f2e606] [cursor=pointer]:
- /url: https://developers.google.com/speed
- link "Haz preguntas en Stack Overflow" [ref=f2e608] [cursor=pointer]:
- /url: https://stackoverflow.com/questions/tagged/pagespeed-insights
- link "Lista de distribución" [ref=f2e610] [cursor=pointer]:
- /url: https://groups.google.com/g/pagespeed-insights-discuss
- generic [ref=f2e611]:
- generic [ref=f2e612]: Contenido relacionado
- link "Actualizaciones" [ref=f2e614] [cursor=pointer]:
- /url: https://developer.chrome.com/blog
- link "Aspectos básicos de la Web" [ref=f2e616] [cursor=pointer]:
- /url: https://developers.google.com/focus/web-development
- link "Casos de éxito" [ref=f2e618] [cursor=pointer]:
- /url: https://web.dev/case-studies
- link "Pódcasts" [ref=f2e620] [cursor=pointer]:
- /url: https://web.dev/shows
- generic [ref=f2e621]:
- generic [ref=f2e622]: Contacto
- link "Twitter" [ref=f2e624] [cursor=pointer]:
- /url: https://twitter.com/ChromiumDev
- link "YouTube" [ref=f2e626] [cursor=pointer]:
- /url: https://www.youtube.com/user/ChromeDevelopers
- generic [ref=f2e627]:
- link [ref=f2e628] [cursor=pointer]:
- /url: https://developers.google.com/
- img "Google Developers Logo" [ref=f2e629]
- link "Chrome" [ref=f2e630] [cursor=pointer]:
- /url: https://developer.chrome.com/
- link "Firebase" [ref=f2e631] [cursor=pointer]:
- /url: https://firebase.google.com/
- link "Todos los productos" [ref=f2e632] [cursor=pointer]:
- /url: https://developers.google.com/products/
- generic [ref=f2e633]:
- link "Política de Términos y Privacidad" [ref=f2e635] [cursor=pointer]:
- /url: https://policies.google.com/
- generic [ref=f2e636]:
- text: Para obtener más información, consulta las
- link "Políticas del Sitio Google Developers" [ref=f2e637] [cursor=pointer]:
- /url: https://developers.google.com/terms/site-policies
- text: .
@@ -0,0 +1,140 @@
- generic [active] [ref=e1]:
- progressbar "Progreso de lectura"
- banner [ref=e2]:
- generic [ref=e3]:
- link "MNQ Catering y Eventos — inicio" [ref=e4] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=e5]
- navigation "Principal" [ref=e6]:
- link "Bodas" [ref=e7] [cursor=pointer]:
- /url: /bodas-reales
- link "Corporativo" [ref=e8] [cursor=pointer]:
- /url: /corporativo-business
- link "Social" [ref=e9] [cursor=pointer]:
- /url: /reuniones-familiares
- link "Nosotros" [ref=e10] [cursor=pointer]:
- /url: /nosotros
- link "Contacto" [ref=e11] [cursor=pointer]:
- /url: /contacto
- link "Contactar con MNQ por WhatsApp" [ref=e13] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20evento
- text: WhatsApp
- main [ref=e14]:
- generic [ref=e17]:
- generic [ref=e18]:
- generic [ref=e19]: Nuestra Esencia
- heading "Hospitalidad con oficio, calma y cercanía." [level=1] [ref=e20]
- paragraph [ref=e21]: "En MNQ cada evento se construye desde dentro: cocina en movimiento, coordinación real y un equipo que cuida el ambiente con discreción. Nos importa que todo salga bien y que se sienta natural."
- generic [ref=e22]:
- img "Equipo de MNQ durante un servicio" [ref=e24]
- paragraph [ref=e26]: "\"Detrás de cada servicio hay manos reales, ritmo y mucho cuidado.\""
- generic [ref=e29]:
- heading "Filosofía de servicio" [level=2] [ref=e30]
- generic [ref=e31]:
- paragraph [ref=e32]: "Creemos que un buen catering no solo se nota en el plato: también se nota en cómo acompaña, en cómo resuelve y en la tranquilidad que deja a quien organiza el evento."
- paragraph [ref=e33]: Trabajamos con producto bien seleccionado, proveedores de confianza y una coordinación muy cuidada para que cocina, sala y montaje hablen el mismo idioma.
- link "Explorar propuesta gastronómica" [ref=e35] [cursor=pointer]:
- /url: /contacto
- generic [ref=e37]:
- generic [ref=e38]:
- generic [ref=e39]: Pilares de Marca
- heading "Valores que nos definen" [level=2] [ref=e40]
- generic [ref=e41]:
- generic [ref=e42]:
- heading "Calidad" [level=3] [ref=e46]
- paragraph [ref=e47]: Innegociable. Desde la frescura del producto hasta el último detalle del servicio de sala.
- generic [ref=e48]:
- heading "Tradición" [level=3] [ref=e52]
- paragraph [ref=e53]: Honramos las técnicas clásicas que han forjado la gran cocina, aplicándolas con respeto.
- generic [ref=e54]:
- heading "Vanguardia" [level=3] [ref=e64]
- paragraph [ref=e65]: Innovamos en presentaciones y texturas para sorprender a los paladares contemporáneos.
- generic [ref=e68]:
- generic [ref=e69]:
- generic [ref=e70]:
- generic [ref=e71]: El Equipo
- heading "Personas reales detrás de cada servicio" [level=2] [ref=e72]
- paragraph [ref=e73]: Nos gusta que quien nos contrata sienta que hay un equipo presente, resolutivo y cercano. Desde la primera conversación hasta el último detalle del montaje, acompañamos con calma y criterio.
- paragraph [ref=e74]: "Esta galería muestra parte de esa energía de trabajo: menos pose, más coordinación, más cocina viva y más confianza en el trato."
- generic [ref=e75]:
- generic [ref=e76]:
- generic [ref=e77]: Cercanía
- paragraph [ref=e78]: Comunicación clara y acompañamiento real durante todo el proceso.
- generic [ref=e79]:
- generic [ref=e80]: Coordinación
- paragraph [ref=e81]: Cocina, sala y montaje trabajando con un mismo ritmo.
- generic [ref=e82]:
- generic [ref=e83]: Presencia
- paragraph [ref=e84]: Un servicio atento y discreto para que el evento fluya sin tensión.
- link "Contactar con MNQ por WhatsApp" [ref=e86] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20hablar%20con%20el%20equipo%20sobre%20mi%20evento
- text: Hablar con el equipo
- generic [ref=e87]:
- figure "Coordinación cercana, montaje cuidado y una forma de trabajar que se nota en el ambiente." [ref=e88]:
- img "Equipo de MNQ durante un servicio" [ref=e90]
- generic [ref=e92]:
- figure "Montaje, tiempos y atención coordinados con naturalidad." [ref=e93]:
- img "Montaje y coordinación del servicio de MNQ" [ref=e95]
- figure "Cocina en movimiento, detalle en cada pase." [ref=e97]:
- img "Preparación gastronómica del equipo de MNQ" [ref=e99]
- figure "Una presencia cercana que acompaña sin invadir." [ref=e101]:
- img "Momento cercano del equipo de MNQ" [ref=e103]
- generic [ref=e107]:
- heading "¿Planeamos algo extraordinario?" [level=2] [ref=e108]
- paragraph [ref=e109]: Estamos listos para transformar su visión en una realidad gastronómica sin precedentes.
- link "Solicitar Dosier Exclusivo" [ref=e110] [cursor=pointer]:
- /url: /contacto
- contentinfo [ref=e111]:
- generic [ref=e112]:
- generic [ref=e113]:
- generic [ref=e114]:
- link "MNQ Catering y Eventos" [ref=e115] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=e116]
- paragraph [ref=e117]: © 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más importantes de su vida.
- generic [ref=e118]:
- link "+34 678 17 15 13" [ref=e119] [cursor=pointer]:
- /url: tel:+34678171513
- link "mnq.elkazurrotaberna.es" [ref=e120] [cursor=pointer]:
- /url: https://mnq.elkazurrotaberna.es
- generic [ref=e121]:
- generic [ref=e122]:
- generic [ref=e123]: Servicios
- link "Bodas Reales" [ref=e124] [cursor=pointer]:
- /url: /bodas-reales
- link "Corporativo" [ref=e125] [cursor=pointer]:
- /url: /corporativo-business
- link "Social" [ref=e126] [cursor=pointer]:
- /url: /reuniones-familiares
- link "Nosotros" [ref=e127] [cursor=pointer]:
- /url: /nosotros
- generic [ref=e128]:
- generic [ref=e129]: Compañía
- link "Contacto" [ref=e130] [cursor=pointer]:
- /url: /contacto
- link "Contactar con MNQ por WhatsApp" [ref=e131] [cursor=pointer]:
- /url: https://wa.me/34678171513
- text: WhatsApp
- link "Aviso legal" [ref=e132] [cursor=pointer]:
- /url: /aviso-legal
- link "Privacidad" [ref=e133] [cursor=pointer]:
- /url: /privacidad
- link "Cookies" [ref=e134] [cursor=pointer]:
- /url: /cookies
- paragraph [ref=e136]: Excelencia culinaria · Diseño de eventos · Gastronomía de autor
- link "Contactar con MNQ por WhatsApp" [ref=e137] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20evento
- generic [ref=e138]: Contactar por WhatsApp
- generic [ref=e143]:
- paragraph [ref=e144]:
- text: Este sitio utiliza almacenamiento técnico necesario para funcionar y mostrar este aviso. Si en el futuro activamos analítica respetuosa con la privacidad o medidas antiabuso, lo detallaremos en
- link "Cookies" [ref=e145] [cursor=pointer]:
- /url: /cookies
- text: "y"
- link "Privacidad" [ref=e146] [cursor=pointer]:
- /url: /privacidad
- text: .
- generic [ref=e147]:
- link "Ver detalle" [ref=e148] [cursor=pointer]:
- /url: /cookies
- button "Entendido" [ref=e149] [cursor=pointer]
@@ -0,0 +1,140 @@
- generic [active] [ref=e1]:
- progressbar "Progreso de lectura"
- banner [ref=e2]:
- generic [ref=e3]:
- link "MNQ Catering y Eventos — inicio" [ref=e4] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=e5]
- navigation "Principal" [ref=e6]:
- link "Bodas" [ref=e7] [cursor=pointer]:
- /url: /bodas-reales
- link "Corporativo" [ref=e8] [cursor=pointer]:
- /url: /corporativo-business
- link "Social" [ref=e9] [cursor=pointer]:
- /url: /reuniones-familiares
- link "Nosotros" [ref=e10] [cursor=pointer]:
- /url: /nosotros
- link "Contacto" [ref=e11] [cursor=pointer]:
- /url: /contacto
- link "Contactar con MNQ por WhatsApp" [ref=e13] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20evento
- text: WhatsApp
- main [ref=e14]:
- generic [ref=e17]:
- generic [ref=e18]:
- generic [ref=e19]: Nuestra Esencia
- heading "Hospitalidad con oficio, calma y cercanía." [level=1] [ref=e20]
- paragraph [ref=e21]: "En MNQ cada evento se construye desde dentro: cocina en movimiento, coordinación real y un equipo que cuida el ambiente con discreción. Nos importa que todo salga bien y que se sienta natural."
- generic [ref=e22]:
- img "Equipo de MNQ durante un servicio" [ref=e24]
- paragraph [ref=e26]: "\"Detrás de cada servicio hay manos reales, ritmo y mucho cuidado.\""
- generic [ref=e29]:
- heading "Filosofía de servicio" [level=2] [ref=e30]
- generic [ref=e31]:
- paragraph [ref=e32]: "Creemos que un buen catering no solo se nota en el plato: también se nota en cómo acompaña, en cómo resuelve y en la tranquilidad que deja a quien organiza el evento."
- paragraph [ref=e33]: Trabajamos con producto bien seleccionado, proveedores de confianza y una coordinación muy cuidada para que cocina, sala y montaje hablen el mismo idioma.
- link "Explorar propuesta gastronómica" [ref=e35] [cursor=pointer]:
- /url: /contacto
- generic [ref=e37]:
- generic [ref=e38]:
- generic [ref=e39]: Pilares de Marca
- heading "Valores que nos definen" [level=2] [ref=e40]
- generic [ref=e41]:
- generic [ref=e42]:
- heading "Calidad" [level=3] [ref=e46]
- paragraph [ref=e47]: Innegociable. Desde la frescura del producto hasta el último detalle del servicio de sala.
- generic [ref=e48]:
- heading "Tradición" [level=3] [ref=e52]
- paragraph [ref=e53]: Honramos las técnicas clásicas que han forjado la gran cocina, aplicándolas con respeto.
- generic [ref=e54]:
- heading "Vanguardia" [level=3] [ref=e64]
- paragraph [ref=e65]: Innovamos en presentaciones y texturas para sorprender a los paladares contemporáneos.
- generic [ref=e68]:
- generic [ref=e69]:
- generic [ref=e70]:
- generic [ref=e71]: El Equipo
- heading "Personas reales detrás de cada servicio" [level=2] [ref=e72]
- paragraph [ref=e73]: Nos gusta que quien nos contrata sienta que hay un equipo presente, resolutivo y cercano. Desde la primera conversación hasta el último detalle del montaje, acompañamos con calma y criterio.
- paragraph [ref=e74]: "Esta galería muestra parte de esa energía de trabajo: menos pose, más coordinación, más cocina viva y más confianza en el trato."
- generic [ref=e75]:
- generic [ref=e76]:
- generic [ref=e77]: Cercanía
- paragraph [ref=e78]: Comunicación clara y acompañamiento real durante todo el proceso.
- generic [ref=e79]:
- generic [ref=e80]: Coordinación
- paragraph [ref=e81]: Cocina, sala y montaje trabajando con un mismo ritmo.
- generic [ref=e82]:
- generic [ref=e83]: Presencia
- paragraph [ref=e84]: Un servicio atento y discreto para que el evento fluya sin tensión.
- link "Contactar con MNQ por WhatsApp" [ref=e86] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20hablar%20con%20el%20equipo%20sobre%20mi%20evento
- text: Hablar con el equipo
- generic [ref=e87]:
- figure "Coordinación cercana, montaje cuidado y una forma de trabajar que se nota en el ambiente." [ref=e88]:
- img "Equipo de MNQ durante un servicio" [ref=e90]
- generic [ref=e92]:
- figure "Montaje, tiempos y atención coordinados con naturalidad." [ref=e93]:
- img "Montaje y coordinación del servicio de MNQ" [ref=e95]
- figure "Cocina en movimiento, detalle en cada pase." [ref=e97]:
- img "Preparación gastronómica del equipo de MNQ" [ref=e99]
- figure "Una presencia cercana que acompaña sin invadir." [ref=e101]:
- img "Momento cercano del equipo de MNQ" [ref=e103]
- generic [ref=e107]:
- heading "¿Planeamos algo extraordinario?" [level=2] [ref=e108]
- paragraph [ref=e109]: Estamos listos para transformar su visión en una realidad gastronómica sin precedentes.
- link "Solicitar Dosier Exclusivo" [ref=e110] [cursor=pointer]:
- /url: /contacto
- contentinfo [ref=e111]:
- generic [ref=e112]:
- generic [ref=e113]:
- generic [ref=e114]:
- link "MNQ Catering y Eventos" [ref=e115] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=e116]
- paragraph [ref=e117]: © 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más importantes de su vida.
- generic [ref=e118]:
- link "+34 678 17 15 13" [ref=e119] [cursor=pointer]:
- /url: tel:+34678171513
- link "mnq.elkazurrotaberna.es" [ref=e120] [cursor=pointer]:
- /url: https://mnq.elkazurrotaberna.es
- generic [ref=e121]:
- generic [ref=e122]:
- generic [ref=e123]: Servicios
- link "Bodas Reales" [ref=e124] [cursor=pointer]:
- /url: /bodas-reales
- link "Corporativo" [ref=e125] [cursor=pointer]:
- /url: /corporativo-business
- link "Social" [ref=e126] [cursor=pointer]:
- /url: /reuniones-familiares
- link "Nosotros" [ref=e127] [cursor=pointer]:
- /url: /nosotros
- generic [ref=e128]:
- generic [ref=e129]: Compañía
- link "Contacto" [ref=e130] [cursor=pointer]:
- /url: /contacto
- link "Contactar con MNQ por WhatsApp" [ref=e131] [cursor=pointer]:
- /url: https://wa.me/34678171513
- text: WhatsApp
- link "Aviso legal" [ref=e132] [cursor=pointer]:
- /url: /aviso-legal
- link "Privacidad" [ref=e133] [cursor=pointer]:
- /url: /privacidad
- link "Cookies" [ref=e134] [cursor=pointer]:
- /url: /cookies
- paragraph [ref=e136]: Excelencia culinaria · Diseño de eventos · Gastronomía de autor
- link "Contactar con MNQ por WhatsApp" [ref=e137] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20evento
- generic [ref=e138]: Contactar por WhatsApp
- generic [ref=e143]:
- paragraph [ref=e144]:
- text: Este sitio utiliza almacenamiento técnico necesario para funcionar y mostrar este aviso. Si en el futuro activamos analítica respetuosa con la privacidad o medidas antiabuso, lo detallaremos en
- link "Cookies" [ref=e145] [cursor=pointer]:
- /url: /cookies
- text: "y"
- link "Privacidad" [ref=e146] [cursor=pointer]:
- /url: /privacidad
- text: .
- generic [ref=e147]:
- link "Ver detalle" [ref=e148] [cursor=pointer]:
- /url: /cookies
- button "Entendido" [ref=e149] [cursor=pointer]
@@ -0,0 +1,127 @@
- generic [active] [ref=e1]:
- progressbar "Progreso de lectura" [ref=e150]
- banner [ref=e2]:
- generic [ref=e3]:
- link "MNQ Catering y Eventos — inicio" [ref=e4] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=e5]
- navigation "Principal" [ref=e6]:
- link "Bodas" [ref=e7] [cursor=pointer]:
- /url: /bodas-reales
- link "Corporativo" [ref=e8] [cursor=pointer]:
- /url: /corporativo-business
- link "Social" [ref=e9] [cursor=pointer]:
- /url: /reuniones-familiares
- link "Nosotros" [ref=e10] [cursor=pointer]:
- /url: /nosotros
- link "Contacto" [ref=e11] [cursor=pointer]:
- /url: /contacto
- link "Contactar con MNQ por WhatsApp" [ref=e13] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20evento
- text: WhatsApp
- main [ref=e14]:
- generic [ref=e17]:
- generic [ref=e18]:
- generic [ref=e19]: Nuestra Esencia
- heading "Hospitalidad con oficio, calma y cercanía." [level=1] [ref=e20]
- paragraph [ref=e21]: "En MNQ cada evento se construye desde dentro: cocina en movimiento, coordinación real y un equipo que cuida el ambiente con discreción. Nos importa que todo salga bien y que se sienta natural."
- generic [ref=e22]:
- img "Equipo de MNQ durante un servicio" [ref=e24]
- paragraph [ref=e26]: "\"Detrás de cada servicio hay manos reales, ritmo y mucho cuidado.\""
- generic [ref=e29]:
- heading "Filosofía de servicio" [level=2] [ref=e30]
- generic [ref=e31]:
- paragraph [ref=e32]: "Creemos que un buen catering no solo se nota en el plato: también se nota en cómo acompaña, en cómo resuelve y en la tranquilidad que deja a quien organiza el evento."
- paragraph [ref=e33]: Trabajamos con producto bien seleccionado, proveedores de confianza y una coordinación muy cuidada para que cocina, sala y montaje hablen el mismo idioma.
- link "Explorar propuesta gastronómica" [ref=e35] [cursor=pointer]:
- /url: /contacto
- generic [ref=e37]:
- generic [ref=e38]:
- generic [ref=e39]: Pilares de Marca
- heading "Valores que nos definen" [level=2] [ref=e40]
- generic [ref=e41]:
- generic [ref=e42]:
- heading "Calidad" [level=3] [ref=e46]
- paragraph [ref=e47]: Innegociable. Desde la frescura del producto hasta el último detalle del servicio de sala.
- generic [ref=e48]:
- heading "Tradición" [level=3] [ref=e52]
- paragraph [ref=e53]: Honramos las técnicas clásicas que han forjado la gran cocina, aplicándolas con respeto.
- generic [ref=e54]:
- heading "Vanguardia" [level=3] [ref=e64]
- paragraph [ref=e65]: Innovamos en presentaciones y texturas para sorprender a los paladares contemporáneos.
- generic [ref=e68]:
- generic [ref=e69]:
- generic [ref=e70]:
- generic [ref=e71]: El Equipo
- heading "Personas reales detrás de cada servicio" [level=2] [ref=e72]
- paragraph [ref=e73]: Nos gusta que quien nos contrata sienta que hay un equipo presente, resolutivo y cercano. Desde la primera conversación hasta el último detalle del montaje, acompañamos con calma y criterio.
- paragraph [ref=e74]: "Esta galería muestra parte de esa energía de trabajo: menos pose, más coordinación, más cocina viva y más confianza en el trato."
- generic [ref=e75]:
- generic [ref=e76]:
- generic [ref=e77]: Cercanía
- paragraph [ref=e78]: Comunicación clara y acompañamiento real durante todo el proceso.
- generic [ref=e79]:
- generic [ref=e80]: Coordinación
- paragraph [ref=e81]: Cocina, sala y montaje trabajando con un mismo ritmo.
- generic [ref=e82]:
- generic [ref=e83]: Presencia
- paragraph [ref=e84]: Un servicio atento y discreto para que el evento fluya sin tensión.
- link "Contactar con MNQ por WhatsApp" [ref=e86] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20hablar%20con%20el%20equipo%20sobre%20mi%20evento
- text: Hablar con el equipo
- generic [ref=e87]:
- figure "Coordinación cercana, montaje cuidado y una forma de trabajar que se nota en el ambiente." [ref=e88]:
- img "Equipo de MNQ durante un servicio" [ref=e90]
- generic [ref=e92]:
- figure "Montaje, tiempos y atención coordinados con naturalidad." [ref=e93]:
- img "Montaje y coordinación del servicio de MNQ" [ref=e95]
- figure "Cocina en movimiento, detalle en cada pase." [ref=e97]:
- img "Preparación gastronómica del equipo de MNQ" [ref=e99]
- figure "Una presencia cercana que acompaña sin invadir." [ref=e101]:
- img "Momento cercano del equipo de MNQ" [ref=e103]
- generic [ref=e107]:
- heading "¿Planeamos algo extraordinario?" [level=2] [ref=e108]
- paragraph [ref=e109]: Estamos listos para transformar su visión en una realidad gastronómica sin precedentes.
- link "Solicitar Dosier Exclusivo" [ref=e110] [cursor=pointer]:
- /url: /contacto
- contentinfo [ref=e111]:
- generic [ref=e112]:
- generic [ref=e113]:
- generic [ref=e114]:
- link "MNQ Catering y Eventos" [ref=e115] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=e116]
- paragraph [ref=e117]: © 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más importantes de su vida.
- generic [ref=e118]:
- link "+34 678 17 15 13" [ref=e119] [cursor=pointer]:
- /url: tel:+34678171513
- link "mnq.elkazurrotaberna.es" [ref=e120] [cursor=pointer]:
- /url: https://mnq.elkazurrotaberna.es
- generic [ref=e121]:
- generic [ref=e122]:
- generic [ref=e123]: Servicios
- link "Bodas Reales" [ref=e124] [cursor=pointer]:
- /url: /bodas-reales
- link "Corporativo" [ref=e125] [cursor=pointer]:
- /url: /corporativo-business
- link "Social" [ref=e126] [cursor=pointer]:
- /url: /reuniones-familiares
- link "Nosotros" [ref=e127] [cursor=pointer]:
- /url: /nosotros
- generic [ref=e128]:
- generic [ref=e129]: Compañía
- link "Contacto" [ref=e130] [cursor=pointer]:
- /url: /contacto
- link "Contactar con MNQ por WhatsApp" [ref=e131] [cursor=pointer]:
- /url: https://wa.me/34678171513
- text: WhatsApp
- link "Aviso legal" [ref=e132] [cursor=pointer]:
- /url: /aviso-legal
- link "Privacidad" [ref=e133] [cursor=pointer]:
- /url: /privacidad
- link "Cookies" [ref=e134] [cursor=pointer]:
- /url: /cookies
- paragraph [ref=e136]: Excelencia culinaria · Diseño de eventos · Gastronomía de autor
- link "Contactar con MNQ por WhatsApp" [ref=e137] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20evento
- generic [ref=e138]: Contactar por WhatsApp
@@ -0,0 +1,125 @@
- generic [active] [ref=f2e1]:
- progressbar "Progreso de lectura"
- banner [ref=f2e2]:
- generic [ref=f2e3]:
- link "MNQ Catering y Eventos — inicio" [ref=f2e4] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=f2e5]
- button "Abrir menú" [ref=f2e7] [cursor=pointer]
- main [ref=f2e11]:
- generic [ref=f2e14]:
- generic [ref=f2e15]:
- generic [ref=f2e16]: Nuestra Esencia
- heading "Hospitalidad con oficio, calma y cercanía." [level=1] [ref=f2e17]
- paragraph [ref=f2e18]: "En MNQ cada evento se construye desde dentro: cocina en movimiento, coordinación real y un equipo que cuida el ambiente con discreción. Nos importa que todo salga bien y que se sienta natural."
- img "Equipo de MNQ durante un servicio" [ref=f2e21]
- generic [ref=f2e24]:
- heading "Filosofía de servicio" [level=2] [ref=f2e25]
- generic [ref=f2e26]:
- paragraph [ref=f2e27]: "Creemos que un buen catering no solo se nota en el plato: también se nota en cómo acompaña, en cómo resuelve y en la tranquilidad que deja a quien organiza el evento."
- paragraph [ref=f2e28]: Trabajamos con producto bien seleccionado, proveedores de confianza y una coordinación muy cuidada para que cocina, sala y montaje hablen el mismo idioma.
- link "Explorar propuesta gastronómica" [ref=f2e30] [cursor=pointer]:
- /url: /contacto
- generic [ref=f2e32]:
- generic [ref=f2e33]:
- generic [ref=f2e34]: Pilares de Marca
- heading "Valores que nos definen" [level=2] [ref=f2e35]
- generic [ref=f2e36]:
- generic [ref=f2e37]:
- heading "Calidad" [level=3] [ref=f2e41]
- paragraph [ref=f2e42]: Innegociable. Desde la frescura del producto hasta el último detalle del servicio de sala.
- generic [ref=f2e43]:
- heading "Tradición" [level=3] [ref=f2e47]
- paragraph [ref=f2e48]: Honramos las técnicas clásicas que han forjado la gran cocina, aplicándolas con respeto.
- generic [ref=f2e49]:
- heading "Vanguardia" [level=3] [ref=f2e52]
- paragraph [ref=f2e53]: Innovamos en presentaciones y texturas para sorprender a los paladares contemporáneos.
- generic [ref=f2e56]:
- generic [ref=f2e57]:
- generic [ref=f2e58]:
- generic [ref=f2e59]: El Equipo
- heading "Personas reales detrás de cada servicio" [level=2] [ref=f2e60]
- paragraph [ref=f2e61]: Nos gusta que quien nos contrata sienta que hay un equipo presente, resolutivo y cercano. Desde la primera conversación hasta el último detalle del montaje, acompañamos con calma y criterio.
- paragraph [ref=f2e62]: "Esta galería muestra parte de esa energía de trabajo: menos pose, más coordinación, más cocina viva y más confianza en el trato."
- generic [ref=f2e63]:
- generic [ref=f2e64]:
- generic [ref=f2e65]: Cercanía
- paragraph [ref=f2e66]: Comunicación clara y acompañamiento real durante todo el proceso.
- generic [ref=f2e67]:
- generic [ref=f2e68]: Coordinación
- paragraph [ref=f2e69]: Cocina, sala y montaje trabajando con un mismo ritmo.
- generic [ref=f2e70]:
- generic [ref=f2e71]: Presencia
- paragraph [ref=f2e72]: Un servicio atento y discreto para que el evento fluya sin tensión.
- link "Contactar con MNQ por WhatsApp" [ref=f2e74] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20hablar%20con%20el%20equipo%20sobre%20mi%20evento
- text: Hablar con el equipo
- generic [ref=f2e75]:
- figure "Coordinación cercana, montaje cuidado y una forma de trabajar que se nota en el ambiente." [ref=f2e76]:
- img "Equipo de MNQ durante un servicio" [ref=f2e78]
- generic [ref=f2e80]:
- figure "Montaje, tiempos y atención coordinados con naturalidad." [ref=f2e81]:
- img "Montaje y coordinación del servicio de MNQ" [ref=f2e83]
- figure "Cocina en movimiento, detalle en cada pase." [ref=f2e85]:
- img "Preparación gastronómica del equipo de MNQ" [ref=f2e87]
- figure "Una presencia cercana que acompaña sin invadir." [ref=f2e89]:
- img "Momento cercano del equipo de MNQ" [ref=f2e91]
- generic [ref=f2e95]:
- heading "¿Planeamos algo extraordinario?" [level=2] [ref=f2e96]
- paragraph [ref=f2e97]: Estamos listos para transformar su visión en una realidad gastronómica sin precedentes.
- link "Solicitar Dosier Exclusivo" [ref=f2e98] [cursor=pointer]:
- /url: /contacto
- contentinfo [ref=f2e99]:
- generic [ref=f2e100]:
- generic [ref=f2e101]:
- generic [ref=f2e102]:
- link "MNQ Catering y Eventos" [ref=f2e103] [cursor=pointer]:
- /url: /
- img "MNQ Catering y Eventos" [ref=f2e104]
- paragraph [ref=f2e105]: © 2025 MNQ Catering y Evento. Excelencia culinaria para los momentos más importantes de su vida.
- generic [ref=f2e106]:
- link "+34 678 17 15 13" [ref=f2e107] [cursor=pointer]:
- /url: tel:+34678171513
- link "mnq.elkazurrotaberna.es" [ref=f2e108] [cursor=pointer]:
- /url: https://mnq.elkazurrotaberna.es
- generic [ref=f2e109]:
- generic [ref=f2e110]:
- generic [ref=f2e111]: Servicios
- link "Bodas Reales" [ref=f2e112] [cursor=pointer]:
- /url: /bodas-reales
- link "Corporativo" [ref=f2e113] [cursor=pointer]:
- /url: /corporativo-business
- link "Social" [ref=f2e114] [cursor=pointer]:
- /url: /reuniones-familiares
- link "Nosotros" [ref=f2e115] [cursor=pointer]:
- /url: /nosotros
- generic [ref=f2e116]:
- generic [ref=f2e117]: Compañía
- link "Contacto" [ref=f2e118] [cursor=pointer]:
- /url: /contacto
- link "Contactar con MNQ por WhatsApp" [ref=f2e119] [cursor=pointer]:
- /url: https://wa.me/34678171513
- text: WhatsApp
- link "Aviso legal" [ref=f2e120] [cursor=pointer]:
- /url: /aviso-legal
- link "Privacidad" [ref=f2e121] [cursor=pointer]:
- /url: /privacidad
- link "Cookies" [ref=f2e122] [cursor=pointer]:
- /url: /cookies
- paragraph [ref=f2e124]: Excelencia culinaria · Diseño de eventos · Gastronomía de autor
- link "Contactar con MNQ por WhatsApp" [ref=f2e125] [cursor=pointer]:
- /url: https://wa.me/34678171513?text=Hola%20MNQ%2C%20quiero%20cotizar%20mi%20evento
- generic [ref=f2e126]: Contactar por WhatsApp
- generic [ref=f2e131]:
- paragraph [ref=f2e132]:
- text: Este sitio utiliza almacenamiento técnico necesario para funcionar y mostrar este aviso. Si en el futuro activamos analítica respetuosa con la privacidad o medidas antiabuso, lo detallaremos en
- link "Cookies" [ref=f2e133] [cursor=pointer]:
- /url: /cookies
- text: "y"
- link "Privacidad" [ref=f2e134] [cursor=pointer]:
- /url: /privacidad
- text: .
- generic [ref=f2e135]:
- link "Ver detalle" [ref=f2e136] [cursor=pointer]:
- /url: /cookies
- button "Entendido" [ref=f2e137] [cursor=pointer]
+28 -28
View File
@@ -1,10 +1,10 @@
# AGENTS.md
## Stack and runtime
- Astro 5 SSR with `@astrojs/node` in `standalone` mode.
- Production entrypoint is `node ./dist/server/entry.mjs`.
- Runtime target is Node 20 (`Dockerfile` and `nixpacks.toml` both pin Node 20).
- TypeScript extends `astro/tsconfigs/strict`.
- Astro 5 SSR app with `@astrojs/node` in `standalone` mode (`astro.config.mjs`).
- Production entrypoint is `node ./dist/server/entry.mjs` (`package.json`, `Dockerfile`, `nixpacks.toml`).
- Node 20 is the deployed runtime in both Docker and Nixpacks.
- TypeScript extends `astro/tsconfigs/strict`; `dist` is excluded (`tsconfig.json`).
## Verified commands
- Install deps: `npm install` or `npm ci`
@@ -14,39 +14,39 @@
- Local preview: `npm run preview`
- Production start: `npm run start`
Recommended verification after UI/content changes:
Recommended verification after any page, styling, metadata, or asset change:
1. `npm run check`
2. `npm run build`
There are currently no repo scripts for linting, formatting, or tests, and no CI workflows to rely on.
There are currently no repo scripts for linting, formatting, or tests, and no CI workflows or Husky hooks to catch mistakes for you.
## Real app structure
- File-based routes live in `src/pages/`.
- Main public routes: `index.astro`, `nosotros.astro`, `bodas-reales.astro`, `corporativo-business.astro`, `reuniones-familiares.astro`, `contacto.astro`.
- Legal routes are part of the real surface area: `cookies.astro` and `privacidad.astro`.
- Shared shell is `src/layouts/MainLayout.astro`.
- Current public/legal routes are: `index.astro`, `nosotros.astro`, `bodas-reales.astro`, `corporativo-business.astro`, `reuniones-familiares.astro`, `contacto.astro`, `cookies.astro`, `privacidad.astro`, and `aviso-legal.astro`.
- `src/layouts/MainLayout.astro` is the real app shell for every route.
- Shared UI lives in `src/components/`.
- Global styling is split across `src/styles/tokens.css`, `base.css`, `layout.css`, `components.css`, `utilities.css`, and `animations.css`.
- Global CSS is imported only through `MainLayout.astro` from `src/styles/{tokens,base,layout,components,utilities,animations}.css`.
## Important implementation facts
- `MainLayout.astro` is the real wiring point: it imports all global CSS and mounts `SiteHeader`, `SiteFooter`, `WhatsAppButton`, and `CookieBanner` on every page.
- `MainLayout.astro` also owns global client behavior: reveal-on-scroll, scroll progress bar, reduced-motion handling, and internal-link fade transitions.
- This is a marketing site optimized for WhatsApp lead capture. Keep WhatsApp as the primary CTA and treat the contact form as secondary.
- The contact form in `src/pages/contacto.astro` is presentational only (`method="dialog"`); do not describe or treat it as a working backend submission flow.
- The WhatsApp destination is hardcoded in multiple places (`+34 678 17 15 13` / `34678171513`). If lead routing changes, search for all occurrences instead of updating a single component and assuming coverage.
## Wiring facts agents usually miss
- `MainLayout.astro` owns the canonical URL, OG/Twitter metadata, default JSON-LD, and optional Umami injection via `PUBLIC_UMAMI_URL` + `PUBLIC_UMAMI_WEBSITE_ID`.
- `MainLayout.astro` also mounts `SiteHeader`, `SiteFooter`, `WhatsAppButton`, and `CookieBanner` globally, plus the reveal/scroll-progress/page-transition client behavior.
- The canonical site URL is `https://www.mnqcatering.com` (`astro.config.mjs`).
- This is a marketing site optimized for WhatsApp lead capture. Keep WhatsApp as the primary CTA.
- `src/pages/contacto.astro` currently has **no form at all**. It is a WhatsApp/phone-led contact page with FAQs and coverage text, so do not describe or implement it as an existing form flow unless you are intentionally adding one.
- The WhatsApp destination/phone number is duplicated across layouts, components, and pages. If routing changes, search the whole repo instead of editing one component and assuming coverage.
## Content and design constraints
- Keep the mobile-first approach in base styles and layout decisions.
- Use CSS variables/tokens instead of introducing utility CSS frameworks.
- Keep service pages structurally consistent, but do not clone copy blindly: adapt CTA, gallery, and messaging per service.
- Galleries belong inside each service page, not as a separate gallery page.
- Preserve the premium editorial tone from `DESIGN.md`; gold is an accent, not a dominant fill color.
- Read `DESIGN.md` before making visual changes; it defines the premium editorial tone.
- Gold is an accent, not a dominant fill color.
- Keep the mobile-first approach and use existing CSS tokens/variables instead of adding a utility framework.
- Keep service pages structurally aligned, but adapt copy, CTA, and gallery content per service instead of cloning sections blindly.
- Galleries are embedded inside service pages, not split into a separate gallery route.
## Deployment notes
- Docker and Nixpacks both expect a built SSR app and start with `node ./dist/server/entry.mjs`.
- Runtime env defaults used by deploy config: `HOST=0.0.0.0`, `PORT=4321`, `NODE_ENV=production`.
## Deployment and SEO gotchas
- Docker build flow is `npm ci` -> `npm run build` -> `node ./dist/server/entry.mjs`.
- Runtime defaults used by deploy configs are `HOST=0.0.0.0`, `PORT=4321`, `NODE_ENV=production`.
- Sitemap generation excludes `/cookies/` and `/privacidad/` only. `aviso-legal.astro` sets `robots="noindex,follow"`, but it is **not** filtered out of the sitemap in `astro.config.mjs`.
## Repo-specific gotchas
- Ignore generated/build output: `.astro/` and `dist/`.
- `.gitignore` also excludes `.opencode/`, `.worktrees/`, and local planning artifacts under `docs/plans/`.
- Read `DESIGN.md` before making visual changes; it contains the project’s visual system and tone constraints.
## Ignore / generated output
- Treat `.astro/` and `dist/` as generated output.
- `.gitignore` also excludes `.opencode/`, `.worktrees/`, and `docs/plans/`.
+2 -2
View File
@@ -1,4 +1,4 @@
FROM node:20-alpine AS builder
FROM node:22-alpine AS builder
WORKDIR /app
@@ -9,7 +9,7 @@ COPY . .
RUN npm run build
# ── Runtime ──────────────────────────────────────────
FROM node:20-alpine AS runtime
FROM node:22-alpine AS runtime
WORKDIR /app
+5 -2
View File
@@ -3,14 +3,17 @@ import node from '@astrojs/node';
import sitemap from '@astrojs/sitemap';
export default defineConfig({
site: 'https://mnq.elkazurrotaberna.es',
site: 'https://www.mnqeventos.es',
output: 'server',
adapter: node({
mode: 'standalone',
}),
integrations: [
sitemap({
filter: (page) => !page.endsWith('/cookies/') && !page.endsWith('/privacidad/'),
filter: (page) =>
!page.endsWith('/cookies/') &&
!page.endsWith('/privacidad/') &&
!page.endsWith('/aviso-legal/'),
}),
],
});
Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

+27
View File
@@ -0,0 +1,27 @@
# Image review groups
These folders are a first-pass review structure for the Instagram photo library.
Original files remain in `docs/imagenes/` root for now.
## Review order
1. `01-team-trust` — real team and hospitality proof for trust
2. `02-event-setups` — premium event/table setup visuals
3. `03-venue-ambience` — sea views, gardens, courtyards, atmosphere
4. `05-food-and-canapes` — food, canapés, display tables
5. `04-weddings-ceremony-details` — wedding-specific ceremony/decor
6. `06-service-in-action` — staff serving / operational moments
7. `07-partners-and-social-proof` — partners, brands, collaborators
8. `08-brand-assets-and-exclusions` — duplicates, tiny assets, AI-marked, avoid-by-default
## Suggested page matches
- Home / trust sections: `01-team-trust`, `02-event-setups`, `03-venue-ambience`
- Nosotros: `01-team-trust`, `06-service-in-action`, `07-partners-and-social-proof`
- Bodas: `04-weddings-ceremony-details`, `02-event-setups`, `03-venue-ambience`, `05-food-and-canapes`
- Corporativo: `01-team-trust`, `02-event-setups`, `07-partners-and-social-proof`
- Reuniones familiares: `02-event-setups`, `03-venue-ambience`, `05-food-and-canapes`
- Contacto: `01-team-trust`, `03-venue-ambience`
## Notes
- I did not move or copy originals yet.
- Best next step: shortlist filenames into each folder after a visual pass.
- Avoid obvious low-quality/tiny/duplicate/AI-marked images for trust-building sections.
Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

@@ -0,0 +1,37 @@
# Plan de acción priorizado — MNQ Catering y Evento
## Fase 0 — Ya hecho, pendiente de un solo paso tuyo
- [x] Corregir dominio canónico en todo el código (commit `a6692b7`)
- [x] Corregir `@type` de schema inválido (`CateringService` → `CateringBusiness`)
- [ ] **Desplegar a producción** — sin esto, nada de lo de hoy tiene efecto real. Es el único paso que falta para resolver ~15 hallazgos de golpe (dominio, sitemap, robots, OG, canonical).
## Fase 1 — Críticos (esta semana)
- [ ] Desplegar el commit `a6692b7` (ver Fase 0)
- [ ] Quitar `/aviso-legal/` del filtro de exclusión inverso en `astro.config.mjs` (está `noindex` pero sigue en el sitemap)
- [ ] Quitar el `<link rel="stylesheet">` duplicado de Google Fonts en `MainLayout.astro` (regresión: re-bloquea el render que el preload ya había resuelto)
- [ ] Revisar por qué el CSS de `/aviso-legal` (24KB) se está bundleando sitewide — probable leak de Astro
- [ ] Agregar headers de seguridad (HSTS, X-Content-Type-Options, X-Frame-Options, CSP) a nivel de hosting/reverse-proxy
- [ ] Habilitar compresión gzip/brotli en el servidor
## Fase 2 — Alto impacto (próximas 2-3 semanas, necesita datos tuyos)
- [ ] Agregar rango de precio ("desde X€ por persona" o similar) — bloqueador #1 de conversión y de citabilidad IA según 3 auditores independientes
- [ ] Agregar rango de capacidad (mínimo/máximo de invitados) por tipo de evento
- [ ] Agregar antelación mínima de reserva
- [ ] Mencionar "Málaga" y zona de cobertura explícitamente en el texto visible de cada página (hoy: cero menciones)
- [ ] Unificar "MNQ Catering y Evento" vs "y Eventos" en todo el sitio (header/footer vs. resto)
- [ ] Corregir la CSS que retrasa el LCP del `<h1>` del hero (animation-delay de 500ms en `hero-enter-2`)
## Fase 3 — Contenido y autoridad (mes 2)
- [ ] Completar Google Business Profile (dirección, categoría, fotos) — ver `docs/seo-audit/publicacion-buscadores-checklist.md`
- [ ] Agregar coordenadas `geo` al schema una vez fijado el pin en GBP
- [ ] Agregar perfiles sociales reales (`sameAs`) si existen
- [ ] Nombrar y dar credenciales al "Chef Ejecutivo" mencionado (hoy sin nombre ni bio) — señal de E-E-A-T
- [ ] Verificar que el venue de testimonio citado ("Castillo de Viñuelas") sea correcto — parece ser de Madrid, no Málaga
- [ ] Replicar el patrón FAQ (bueno para AEO) en homepage, no solo en /contacto
- [ ] Reescribir el párrafo "cobertura confirmada caso a caso" que se repite casi idéntico en 5 páginas
## Fase 4 — Monitoreo continuo
- [ ] Verificar Search Console tras el deploy (indexación real de las 6 páginas)
- [ ] Re-correr Lighthouse tras aplicar Fase 1-2
- [ ] Medir `/corporativo-business` con Lighthouse (no se completó en esta auditoría por límite de tiempo)
- [ ] Confirmar comportamiento del apex `mnqeventos.es` sin `www` (no respondió durante esta auditoría, verificar redirect)
@@ -0,0 +1,81 @@
# Auditoría SEO completa — MNQ Catering y Evento
Fecha: 2026-09-15
Sitio auditado: **https://www.mnqeventos.es** (dominio real y registrado)
## ⚠️ Nota metodológica crítica
Esta auditoría arrancó apuntando a `mnqcatering.com` porque es el dominio que
usa todo el código fuente (`astro.config.mjs`, schema, footer, etc.) y los
últimos commits del repo. A mitad de auditoría se confirmó — vía `dig`,
`whois` y `curl`/WebFetch independientes — que **`mnqcatering.com` nunca fue
registrado**: WHOIS devuelve "No match", no tiene NS, no resuelve. El dominio
real, registrado y sirviendo tráfico ahora mismo es **`www.mnqeventos.es`**.
Se corrigió el rumbo a mitad de auditoría: cada especialista fue re-dirigido
contra `www.mnqeventos.es`. El código del repo ya fue corregido en el commit
`a6692b7` (dominio canónico + un bug real de schema.org encontrado en la
auditoría), **pero ese fix todavía no está desplegado en producción** — el
sitio en vivo sigue sirviendo el build viejo, con todas las referencias
internas (canonical, OG, JSON-LD, sitemap, robots.txt) apuntando al dominio
muerto.
**Esto es, en sí mismo, el hallazgo más severo de toda la auditoría**: hasta
que se despliegue, cada motor de búsqueda y cada IA que respete la
canonicalización va a asociar el contenido con una URL que no existe.
## Resumen ejecutivo
**SEO Health Score: ~52/100 (estado actualmente en vivo)**
Este número reflejaría **~65-70/100 solo con desplegar** el fix ya
commiteado (dominio + schema), sin escribir una línea de código nueva. El
resto (contenido, precios, GBP) sí requiere trabajo adicional.
| Categoría | Score | Nota |
|---|---|---|
| Técnico | 58/100 | Bueno en fuente; roto en vivo por el dominio no desplegado |
| Contenido | 32/100 | Contenido "thin", cero cifras concretas (precio/capacidad) |
| Schema / structured data | 62/100 (medido antes del fix) | `@type` inválido corregido hoy, pendiente de deploy |
| Sitemap | 25/100 (en vivo) → ~75 post-deploy | Cadena de sitemap 100% rota en vivo por el dominio |
| Performance (Lighthouse real) | ~78-84/100 | Bueno, con un LCP evitable por CSS de animación |
| Visual/mobile | No verificable | Limitación de red del sandbox, no defecto del sitio |
| AEO / GEO (IA) | 46/100 | Permisivo con AI crawlers, pero sin señales de marca |
| SEO local | 22/100 (en vivo) | Sin dirección/ciudad visible en el sitio en vivo hoy |
| SXO (experiencia de búsqueda) | 59/100 | Estructura de página correcta, sin ancla de precio/zona |
### Top 5 críticos
1. **El fix de dominio ya commiteado no está desplegado** — deploy pendiente, cero código nuevo necesario.
2. **Cero mención de "Málaga" o de la dirección en el sitio en vivo** — ni en texto ni en schema.
3. **Cero cifras de precio/capacidad/antelación** en ninguna página — el bloqueador #1 de conversión y de citabilidad por IA.
4. `@type: "CateringService"` no es un tipo válido de schema.org — corregido hoy a `CateringBusiness`, pendiente de deploy.
5. El sitemap y el robots.txt en vivo apuntan a `sitemap-0.xml` del dominio muerto — cadena de descubrimiento rota.
### Top 5 quick wins (una vez desplegado)
1. Deploy del commit `a6692b7` — resuelve dominio, schema, sitemap, robots.txt, OG de un saque.
2. Agregar "Málaga" + rango de precio "desde X€" en homepage y páginas de servicio (bloqueado solo por falta de esos datos reales, no de código).
3. Quitar el `<link rel="stylesheet">` duplicado de Google Fonts que re-bloquea el render (regresión de un fix anterior).
4. Excluir `/aviso-legal/` del sitemap (ya está `noindex` pero sigue listada).
5. Unificar "MNQ Catering y Evento" vs "y Eventos" (inconsistencia de nombre de marca en header/footer vs. resto del sitio).
## Detalle por categoría
Cada archivo tiene evidencia completa (curl/dig/whois, snippets, tablas de severidad):
- [`findings/technical.md`](findings/technical.md) — robots, sitemap, canonicals, headers de seguridad, TLS
- [`findings/content.md`](findings/content.md) — E-E-A-T, thin content, citabilidad IA
- [`findings/schema.md`](findings/schema.md) — JSON-LD, tipo inválido corregido, recomendaciones
- [`findings/sitemap.md`](findings/sitemap.md) — estructura, aviso-legal, trailing slash
- [`findings/performance.md`](findings/performance.md) — Lighthouse real, LCP, CSS duplicado
- [`findings/visual.md`](findings/visual.md) — bloqueado por limitación de red del sandbox
- [`findings/geo.md`](findings/geo.md) — AEO/GEO, llms.txt, AI crawlers
- [`findings/local.md`](findings/local.md) — NAP, GBP (pendiente, reconocido), schema local
- [`findings/sxo.md`](findings/sxo.md) — SERP real, personas, page-type match
## Seguridad de headers (hallazgo transversal)
Ninguna respuesta del sitio en vivo trae HSTS, X-Content-Type-Options,
X-Frame-Options, CSP ni Referrer-Policy, y no hay compresión gzip/brotli en
el HTML. Esto es de capa de hosting/reverse-proxy, no de código Astro — hay
que revisarlo donde esté corriendo el servidor (Docker/nixpacks + lo que sea
que haga de proxy delante).
@@ -0,0 +1,142 @@
# Content Quality Audit — mnqcatering.com
Scope: E-E-A-T, readability, thin content, duplication, AI citation readiness for the 6 commercial pages (`/`, `/nosotros`, `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares`, `/contacto`).
## Methodology note / critical caveat
**The live site could not be fetched during this audit.** `www.mnqcatering.com` and `mnqcatering.com` returned `NXDOMAIN` both from the local resolver and when queried directly against `8.8.8.8` (Google public DNS) on 2026-09-15 — this is a real, non-sandboxed DNS failure, not a tool limitation (general internet access and DNS resolution for other domains worked fine in the same environment). If this is still true in production, it is a **critical, audit-blocking issue in its own right**: no amount of content quality matters if the domain doesn't resolve — Googlebot, ChatGPT/Perplexity crawlers, and users get nothing. This should be verified independently and flagged to whichever category owns DNS/hosting/technical SEO; it is out of scope for this content-only review to diagnose further.
Given the fetch failure, this audit is based on the **Astro page source** (`src/pages/*.astro`) in the repo, which renders the copy 1:1 (no client-side content injection observed — FAQ arrays and structured data are server-rendered at build time). Word counts below are computed programmatically from the actual rendered text nodes (frontmatter, `<style>`, `<script>`, and JSX expressions stripped), not from source line/byte counts.
---
## Summary
The site has real trust scaffolding — a genuine street address, a real phone number, `CateringService` + `FAQPage` schema.org markup, legal pages (aviso legal/privacidad/cookies), and what appear to be genuine team/kitchen photos rather than stock imagery. But every one of the 6 commercial pages is **severely thin** (well under half of Google's topical-coverage floor for its page type), the four FAQ blocks are **generic and evasive rather than fact-bearing**, the "coverage is confirmed case-by-case" paragraph is **repeated near-verbatim five times** across five different pages, and — most importantly for AI-citability — **there is still no pricing anchor, no capacity range, and no lead-time/booking-window figure anywhere on the site**. This was flagged as a gap in a prior audit round; based on the current source, it has not been resolved. An AI assistant can correctly confirm "yes, MNQ does weddings in Málaga," but cannot answer any of the three questions a prospective customer (or an AI Overview) actually needs — how much, how many guests, how far in advance to book.
**Content Quality Score: 32/100**
**AI Citation Readiness Score: 24/100**
---
## Findings
### 1. Thin content on every commercial page (HIGH severity)
Word counts of visible body copy (FAQ text included where present):
| Page | Words (measured) | Page-type floor | % of floor |
|---|---|---|---|
| `/` (homepage) | ~287 | 500 | 57% |
| `/nosotros` (about — E-E-A-T critical) | ~291 | ~500 (treated as homepage-tier) | 58% |
| `/bodas-reales` (service) | ~391 (319 body + 72 FAQ) | 800 | 49% |
| `/corporativo-business` (service) | ~387 (307 body + 80 FAQ) | 800 | 48% |
| `/reuniones-familiares` (service) | ~414 (347 body + 67 FAQ) | 800 | 52% |
| `/contacto` | ~266 (191 body + 75 FAQ) | ~400–500 (lighter bar) | 53–67% |
None of the three actual service pages reach even 55% of the 800-word topical-coverage floor Google's guidelines describe for service pages. `/nosotros` — the single most important page for demonstrating Experience/Expertise — is barely 291 words and names no one.
**Recommendation:** Each service page needs genuinine topical expansion, not filler: a real sample menu or format breakdown per service type, 2–3 detailed case studies with real numbers (guest count, venue, service style), and a named chef/team-lead bio with real credentials on `/nosotros`.
### 2. No pricing, capacity, or lead-time facts anywhere (HIGH severity — this is the prior-round gap, still open)
Every page repeats variations of "se calcula/valora según..." without ever landing on a number. Representative quotes:
- Homepage: *"Cada proyecto se valora de forma individual. Confirmamos la viabilidad según la fecha, el número de asistentes, el tipo de servicio y el desplazamiento necesario..."*
- `/bodas-reales`: *"Propuesta económica: se calcula según menú, servicio, menaje, tiempos y desplazamiento."*
- `/corporativo-business`: *"Presupuesto: siempre se calcula a medida según servicio, menaje, personal y desplazamiento."*
- `/reuniones-familiares` FAQ: *"¿Cómo se prepara el presupuesto? Se ajusta al número estimado de invitados, al formato del servicio, al menaje necesario y al desplazamiento previsto."*
Checked explicitly via grep across all page source: zero occurrences of "€", "precio", "desde [number]", any guest-count range (e.g. "20–500 invitados"), any stated minimum/maximum group size, or any lead-time figure ("reserve con X semanas/meses"). This is unchanged from what a prior audit round already flagged.
**Why this matters for AI citability:** an AI Overview or ChatGPT answer to "cuánto cuesta un catering de boda en Málaga" or "¿cuántos invitados puede cubrir MNQ?" cannot be constructed from this content — there is nothing to lift. Even an indicative range ("desde 65€/invitado", "de 20 a 400 comensales", "recomendamos reservar con 2–3 meses de antelación") would be directly quotable and would materially change AI-citation odds. Right now the honest answer any AI tool can give is "contact them to find out," which is a weak, low-value citation.
### 3. FAQ content is generic and non-committal, not fact-bearing (MEDIUM-HIGH severity)
`FAQPage` schema is present on 4 pages (`bodas-reales`, `corporativo-business`, `reuniones-familiares`, `contacto`) as stated, but the answers dodge the question rather than answering it. Example — `/bodas-reales`:
> Q: *"¿El presupuesto incluye solo comida?"*
> A: *"La propuesta puede contemplar cocina, servicio, menaje y necesidades de montaje, según lo que requiera la celebración."*
This never actually says yes or no, nor gives a typical inclusion list. Same pattern on `/corporativo-business`:
> Q: *"¿Cómo valoran la cobertura de un evento de empresa?"*
> A: *"La confirmamos según disponibilidad de fecha, desplazamiento, complejidad logística del espacio y necesidades reales de producción."*
This is the kind of FAQ answer an AI system will *not* select to quote, because it contains no extractable fact — it's a description of a process, not an answer. Compare to what would actually be citable: "Sí, la propuesta incluye siempre cocina y servicio de sala; menaje y decoración se cotizan aparte salvo que se solicite el paquete completo."
Also note the FAQ *questions* themselves are near-duplicated across pages: "¿Cómo se confirma/valora la cobertura/viabilidad?" appears, reworded, on `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares`, and `/contacto`. "¿Cómo se prepara/calcula el presupuesto?" appears on 3 of the 4. This is templated content with the labels swapped, not four independently useful FAQ sections.
### 4. Repeated near-duplicate paragraph across 5 pages (MEDIUM severity)
The "we confirm coverage case-by-case, based on date/location/guest count/format/travel" paragraph is reused, reworded, on every single commercial page:
- Homepage: *"La cobertura final se valida caso a caso para asegurar montaje, tiempos de servicio y desplazamiento coherentes con el evento."*
- `/bodas-reales`: *"Viabilidad: la confirmamos tras revisar disponibilidad y condiciones del espacio."*
- `/corporativo-business`: *"Cobertura confirmada: La viabilidad final se valida según desplazamiento, montaje necesario y condicionantes del espacio."*
- `/reuniones-familiares`: *"Cobertura confirmada: La viabilidad se revisa caso a caso para asegurar que el espacio y la logística estén alineados con la experiencia que promete MNQ."*
- `/contacto`: *"No trabajamos con una cobertura automática ni con propuestas cerradas. Cada servicio se estudia según la ubicación del evento, la fecha disponible, el volumen de invitados y las necesidades reales de montaje o servicio."*
Individually each is fine; together, five near-identical restatements of the same non-answer read as templated boilerplate rather than distinct topical coverage per page — a pattern the Sept 2025 QRG flags as a low-quality-AI-content marker ("repetitive structure across pages"). The three-card layout (label + one sentence, "we assess X case by case") is also structurally identical across `/` , `/corporativo-business`, and `/reuniones-familiares`.
### 5. No named expertise signal — "Chef Ejecutivo" is mentioned but never identified (HIGH severity for Expertise/Authoritativeness)
Grep across all page source for "año", "experiencia", "fundad", "premio", "certificad", "chef" returns exactly one hit: `/reuniones-familiares.astro` line 278, *"Reunión con nuestro Chef Ejecutivo para definir el concepto gastronómico"* — no name, no bio, no photo caption identifying who this is, no prior restaurant/culinary pedigree, no years of experience, no certifications, no press mentions, no awards. `/nosotros` — the page whose entire job is to carry Expertise/Experience signals — never names a single person; the hero photo alt text is *"Responsable de MNQ acompañando la puesta a punto..."* (a role, not a name).
**Recommendation:** name the chef/founder, state actual years of experience or prior kitchens, add a real bio and headshot with credentials. This is the single highest-leverage E-E-A-T fix available.
### 6. Testimonials are unverifiable and one is geographically inconsistent with the brand's core claim (MEDIUM severity — needs owner verification)
Testimonials use first names only, no last names, no photos, no link to a verifiable source (Google Business Profile, Bodas.net, etc.):
- *"Isabel & Marcos — Boda en Hacienda del Sol"* (homepage)
- *"Elena & Carlos — Finca La Montaña, Junio 2023"* / *"Patricia & Javier — Castillo de Viñuelas, Septiembre 2023"* (`/bodas-reales`)
**Flag for owner verification, not asserted as fact (could not browse to confirm live):** "Castillo de Viñuelas" is, per general knowledge, a well-known events venue in Tres Cantos, near Madrid — not in Málaga province. If MNQ's business is positioned as Málaga-based catering, a testimonial citing a Madrid-region venue either (a) represents a genuine out-of-area booking worth stating explicitly ("also available for destination weddings outside Málaga"), or (b) is placeholder/generic copy not tied to a real MNQ event — which would actively undermine local E-E-A-T if discovered by a prospective client or a fact-checking AI system. This is worth a direct check with the business owner before the next content pass.
No client company logos are shown on `/corporativo-business` despite claiming galas/lanzamientos "de alto nivel" for named-sounding brands.
### 7. Readability (LOW severity — this is a genuine strength)
Spanish sentence structure across all 6 pages is clean: short-to-medium sentences, no dense jargon, no run-on subordinate clauses. Business/process vocabulary ("desplazamiento", "menaje", "montaje", "briefing") is appropriate for the catering-industry audience and not overused. Marketing copy tends toward generic-premium adjectives ("excelencia", "exclusivo", "inolvidable", "de autor") but doesn't cross into incomprehensible fluff. This is the one area needing no changes.
### 8. What already works well
- Real, verifiable NAP: phone `+34 678 17 15 13` and street address `Calle Camino Vivero, 6, 29014, Málaga` are consistent across footer, `/contacto`, and `CateringService` schema (`src/layouts/MainLayout.astro`) — good baseline Trustworthiness signal.
- `CateringService` + `FAQPage` JSON-LD is correctly implemented and machine-parseable (structured data itself is not the audit's finding — see `geo.md` / technical findings for schema-specific review).
- Legal transparency pages exist (`aviso-legal`, `privacidad`, `cookies`) — a real trust signal most small local competitors skip.
- Team/kitchen photography on `/nosotros` (`mnq-team-service.jpg`, `mnq-team-kitchen.webp`, etc.) appears to be genuine operational photography rather than stock — a real Experience signal, just uncaptioned with names.
- `areaServed` in schema is honestly scoped to Málaga city + province rather than an inflated national claim — a good-faith trust choice, consistent with the git history ("add local business address and area served signals").
- Format lists per service type (e.g. bodas: *"cóctel, banquete, recena o una combinación"*; corporate: *"coffee break, cóctel, comida de empresa, cena institucional"*) are concrete and non-generic — these are genuinely useful, specific facts and should be the template for how pricing/capacity/lead-time facts get added.
---
## AI-citability test results
- **"¿Hace MNQ bodas en Málaga?"** — Answerable and citable. `/bodas-reales` + schema `serviceType`/`areaServed` support a clean, correct answer.
- **"¿Cómo reservo a MNQ para un evento corporativo?"** — Partially answerable: WhatsApp (`+34 678 17 15 13`), a contact form, and the specific info to send (fecha, ubicación, horario, asistentes, formato) are all stated on `/corporativo-business` and `/contacto`. This is citable at a shallow "how to start" level.
- **"¿Cuánto cuesta / cuántos invitados puede cubrir / con cuánta antelación reservar?"** — Not answerable from current content. No price anchor, no capacity range, no lead-time figure exists anywhere in the source. This is the highest-priority content gap for AI citation readiness.
---
## Scores
| Factor | Weight | Score /100 | Notes |
|---|---|---|---|
| Experience | 20% | 35 | Real team photos, but no named individuals, no dated case studies |
| Expertise | 25% | 25 | Unnamed "Chef Ejecutivo," zero credentials/years/certifications anywhere |
| Authoritativeness | 25% | 20 | No press, no awards, no third-party review links, one geographically-inconsistent testimonial venue to verify |
| Trustworthiness | 30% | 50 | Real NAP + legal pages + schema, undercut by zero pricing transparency and unverifiable testimonials |
| **E-E-A-T weighted** | | **33/100** | |
**Content Quality Score: 32/100**
**AI Citation Readiness Score: 24/100**
## Priority recommendations (highest impact first)
1. Add at least indicative pricing (a "desde X€/invitado" range or 2–3 worked examples), a capacity range, and a lead-time recommendation to every service page and the FAQ blocks — this is the single biggest lever for both thin-content and AI-citability.
2. Name and credential the chef/founder on `/nosotros`; convert the unnamed "Chef Ejecutivo" mention into a real bio.
3. Rewrite the 4 FAQ blocks so each answer states a concrete fact/number instead of describing the internal evaluation process.
4. De-duplicate the "coverage confirmed case-by-case" paragraph — keep one clear statement of the qualification process (e.g. on `/contacto`) and use the space on service pages for page-specific substance (sample menus, format detail, case studies) instead.
5. Verify (with the business owner) the "Castillo de Viñuelas" testimonial location before the next content pass, and add real last names/photos or a link to a verifiable review source for all testimonials.
6. Independently confirm whether the DNS `NXDOMAIN` observed for `www.mnqcatering.com` / `mnqcatering.com` during this audit (2026-09-15, confirmed against both local resolver and `8.8.8.8`) reflects current production state — if so, this blocks all crawling/AI-citation regardless of content fixes.
@@ -0,0 +1,161 @@
# GEO / AI Search Readiness Audit — mnqeventos.es (corrected)
**Audit date:** 2026-09-15
**Live target audited:** https://www.mnqeventos.es
**Method:** Live DNS resolution, direct HTTP fetch (curl), SSR-aware rendering via `render_page.py --mode auto`, repository source inspection for the pending (undeployed) fix.
> **Correction notice:** An earlier pass of this audit targeted `mnqcatering.com`, which is not a registered domain (WHOIS: no match; DNS: NXDOMAIN) — that was a mistake in the audit target, not a finding about the real site, and produced a meaningless 0/100 score. The real production domain is **`https://www.mnqeventos.es`**, confirmed live and resolving (`169.58.117.246`, HTTP/2 200 on `/`, `/robots.txt`, `/llms.txt`). This document replaces that earlier pass entirely.
## Summary
The live site is technically reachable and reasonably crawlable (SSR HTML, permissive `robots.txt`, working `llms.txt`), but it is **actively telling every crawler — including every AI crawler in scope — the wrong canonical domain**. The canonical tag, Open Graph tags, JSON-LD entity `url`, the `robots.txt` `Sitemap:` directive, and the visible footer link all point to `mnqcatering.com`, a domain that is unregistered and does not resolve. This is a live, current-production defect (not a legacy leftover in docs) with direct GEO consequences: AI crawlers that respect canonicalization will attribute this content to a dead URL, entity graphs built from the `CateringService` JSON-LD will resolve to a broken `url` field, and `og:image`/`og:url` previews (used by some AI answer engines for citation cards) will fail to load.
The good news: the root cause is already fixed in the repository (commit `a6692b7 fix(seo): correct canonical domain to www.mnqeventos.es`, plus `astro.config.mjs`, `MainLayout.astro`, `SiteFooter.astro`, `contacto.astro`, `public/robots.txt`, `public/llms.txt` all now reference `mnqeventos.es`) — it just **has not been deployed to production yet**. The live `llms.txt` served today is also a stale, thinner version missing the address and area-served lines that exist in the repo's current `llms.txt`. Once deployed, several of the findings below resolve automatically; I've flagged which ones.
## Findings
### 1. Canonical URL, Open Graph, and JSON-LD entity `url` all point to a dead domain — HIGH (live defect, fix pending deploy)
- **Severity:** High
- **Evidence (live, fetched 2026-09-15):**
- `<link rel="canonical" href="https://www.mnqcatering.com/">` on `/`, and `https://www.mnqcatering.com/contacto`, `https://www.mnqcatering.com/nosotros` on those pages respectively.
- `<meta property="og:url" content="https://www.mnqcatering.com/">`, `<meta property="og:image" content="https://www.mnqcatering.com/images/foto-bodas.jpg">` — the image URL will fail to load for any consumer (AI citation card, social preview) since `mnqcatering.com` does not resolve.
- JSON-LD `CateringService` schema on `/`, `/contacto`, `/nosotros`: `"url":"https://www.mnqcatering.com"`.
- Footer visible link: `<a href="https://www.mnqcatering.com">www.mnqcatering.com</a>` on every page — a dead outbound link on a live site.
- `umami` analytics script tag: `data-domains="www.mnqcatering.com"` (low GEO impact, but confirms the whole template still ships the old domain).
- **Impact:** AI/search crawlers that respect `rel=canonical` will index/attribute content to a non-existent URL, which can suppress citation entirely or cause AI engines to silently drop the page from consideration when the canonical target 404s/fails to resolve. Structured-data entity resolution (how Google/Bing/AI systems build a knowledge-graph node for "MNQ Catering y Evento") is anchored to a broken `url` field.
- **Status:** Already fixed in repo (`astro.config.mjs: site: 'https://www.mnqeventos.es'`, `MainLayout.astro` line 33/98, `SiteFooter.astro` line 22, `contacto.astro` line 108) but **not yet deployed**.
- **Recommendation:** Deploy the pending fix immediately. This is the single highest-impact, already-solved change — it just needs to ship. Effort: none (code complete), deploy only.
### 2. `robots.txt` Sitemap directive points to a domain that does not exist — HIGH (live defect, fix pending deploy)
- **Severity:** High
- **Evidence (live):**
```
User-agent: *
Allow: /
Sitemap: https://www.mnqcatering.com/sitemap-index.xml
```
Verified: `curl -o /dev/null -w '%{http_code}' https://www.mnqcatering.com/sitemap-index.xml` → connection failure / `000` (domain unregistered). The correct, working sitemap is live and reachable at `https://www.mnqeventos.es/sitemap-index.xml` → HTTP 200, but nothing in the live `robots.txt` points there.
- **Impact:** Crawlers that discover the sitemap only via `robots.txt` (a common pattern for AI/search crawlers doing full-site discovery) get a dead pointer and may fail to enumerate all indexable pages, slowing or preventing discovery of `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares`, etc.
- **Status:** Already fixed in repo `public/robots.txt` (now points to `https://www.mnqeventos.es/sitemap-index.xml`) — pending deploy.
- **Recommendation:** Ships with fix #1's deploy. Effort: none, deploy only.
### 3. `robots.txt` is permissive for AI crawlers — GOOD (no action needed)
- **Severity:** Positive finding
- **Evidence:** `User-agent: * / Allow: /` — a single wildcard rule with no disallows. This implicitly allows GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, CCBot, anthropic-ai, and cohere-ai; nothing is blocked.
- **Recommendation:** No change needed. Optionally add explicit named-agent blocks for CCBot/anthropic-ai/cohere-ai only if the business wants to opt out of training-only crawling while keeping AI *search* visibility (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot) — this is optional per the audit brief, not a defect.
### 4. `llms.txt` is present and live, but the deployed version is thinner and has the wrong canonical domain than the repo's current version — MEDIUM (live defect, fix pending deploy)
- **Severity:** Medium
- **Evidence — live, fetched 2026-09-15 (`https://www.mnqeventos.es/llms.txt`, HTTP 200):**
```
MNQ Catering y Evento
- Canonical domain: https://www.mnqcatering.com
- Business type: Premium catering service
- Services: Bodas, eventos corporativos, reuniones familiares
- Primary contact channels: WhatsApp (+34 678 17 15 13), phone (+34 678 17 15 13)
- Key pages: /, /nosotros, /bodas-reales, /corporativo-business, /reuniones-familiares, /contacto
```
- **Repo's current `public/llms.txt` (committed, not yet deployed)** adds two lines the live version is missing:
```
- Address: Calle Camino Vivero, 6, 29014, Málaga, España
- Area served: Málaga (city) and Provincia de Málaga
```
and correctly says `Canonical domain: https://www.mnqeventos.es`.
- **Format note (applies to both live and repo versions):** Neither follows the llms.txt spec convention closely — no `# Title` H1, no `>` summary blockquote, no markdown-style `[Key Page](full-url): description` links (currently plain relative paths in a flat bullet list). This is a minor quality gap versus the informal but now-common llms.txt convention; it doesn't block parsing but is a missed opportunity for AI agents that expect the structured format.
- **Recommendation:** Deploy the repo's current version immediately (fixes domain + adds address/area-served — real local-entity signals). Separately, reformat to standard llms.txt structure (H1 title, one-line summary blockquote, markdown links per key page with a short description each) for better parseability by LLM-based agents. Effort: Low (content already exists, just needs reformatting).
### 5. No FAQ-style content on the homepage; direct-answer content is confined to `/contacto` — MEDIUM
- **Severity:** Medium
- **Evidence:** `/contacto` carries a genuine `FAQPage` JSON-LD block with 3 Q&A pairs (e.g. "¿Qué datos conviene enviar para pedir una propuesta?" → "Fecha estimada, lugar del evento, número aproximado de asistentes y el tipo de servicio que necesita.") and matching visible question-format subheadings ("Qué necesitamos para orientarle", "Cómo planteamos el presupuesto"). This is a genuine AEO positive — but it exists only on one page. The homepage, `/nosotros`, and the three service pages (not fetched this pass, but referenced identically in nav) use marketing prose headings ("Servicio planificado según ubicación, formato y ritmo del evento") rather than question-based H2/H3s, and no passage on the homepage is a self-contained 134–167-word answer block — most are 1–3 short sentences of brand copy.
- **Recommendation:** Extend the `FAQPage` + question-based-heading pattern already proven on `/contacto` to the service pages (bodas, corporativo, reuniones-familiares) and `/nosotros`, each with 3–5 self-contained Q&A pairs in the 40–80 word range (FAQ answers don't need to hit the full 134–167-word "article passage" target, but should stay self-contained and specific). Effort: Medium — content writing + schema markup, reusing the existing `/contacto` pattern as a template.
### 6. No brand/entity linking signals (no `sameAs`, no social profile links anywhere on-site) — MEDIUM-HIGH
- **Severity:** Medium-High
- **Evidence:** Checked `/`, `/contacto`, `/nosotros` for LinkedIn, Instagram, Facebook, X/Twitter, YouTube, TikTok links — zero matches. The `CateringService` JSON-LD has no `sameAs` array. No mentions of Wikipedia, Reddit, or YouTube presence found on-site (external presence not independently verified this pass — no search/social-listening tool was used).
- **Impact:** Per the brand-mention correlation data, YouTube mentions (~0.737) and Reddit presence are the strongest predictors of AI citation; Wikipedia entity presence is also high-value. Zero on-site `sameAs`/social signals means AI systems building an entity profile for "MNQ Catering y Evento" have nothing to cross-reference beyond the domain itself.
- **Recommendation:** (a) Add a `sameAs` array to the `CateringService` JSON-LD linking to whatever active social profiles exist (Instagram/Facebook are typical for catering businesses even without LinkedIn/YouTube). (b) If no social profiles exist yet, creating even a modest Instagram/YouTube presence (venue photos, event highlight reels) would meaningfully move the needle given YouTube's outsized correlation with AI citation. Effort: Low for `sameAs` markup (if profiles exist), Medium-High for building new social presence from scratch.
### 7. No address / local-entity structured data live (fix pending deploy) — MEDIUM
- **Severity:** Medium
- **Evidence:** Live JSON-LD `CateringService` on `/`, `/contacto`, `/nosotros` has no `address`, `areaServed`, or `geo` fields — only `name`, `url` (wrong domain), `description`, `telephone`, `serviceType`, `contactPoint`. No address text appears anywhere in the visible page copy either. The repo's current `llms.txt` (undeployed) already has the address/area-served text; it's unclear from this pass whether the `CateringService` JSON-LD itself is being updated with structured `address`/`areaServed`/`geo` fields, or whether the fix is llms.txt-only.
- **Recommendation:** Once the domain fix deploys, separately confirm (or add) structured `address` and `areaServed` fields inside the `CateringService` JSON-LD itself (not just llms.txt prose) — this is what powers Google's local entity panel and is a stronger machine-readable signal than plain text. Effort: Low, since the address text is already sourced (`Calle Camino Vivero, 6, 29014, Málaga, España`).
### 8. Server-side rendering confirmed — GOOD (no action needed)
- **Severity:** Positive finding
- **Evidence:** `render_page.py --mode auto` on `https://www.mnqeventos.es/` returned `"is_spa": false`, `"mode_used": "raw"` — the raw HTTP response already contains the full rendered page (hero copy, service cards, testimonials, footer, all JSON-LD) with no client-side hydration gap. This matches the Astro `output: 'server'` architecture confirmed in `astro.config.mjs`.
- **Recommendation:** No change needed. This is the single strongest technical-accessibility asset the site has — every AI crawler sees the same content a browser does, with zero JS-execution risk.
### 9. Descriptive image alt text present — GOOD (partial credit)
- **Severity:** Positive finding, with a gap
- **Evidence:** Homepage images carry specific, descriptive `alt` text (e.g. `"MNQ Catering — salón de bodas premium"`, `"Vieiras con azafrán"`, `"Bartender de coctelería"`) rather than generic/empty alts. However, there is no video content anywhere observed, and no image captions or surrounding text that would let an AI engine extract a citable fact from an image (e.g. no recipe steps, no menu item descriptions tied to photos).
- **Recommendation:** Keep the alt-text discipline for new images. Consider short video content (event highlight reels) for the Multi-Modal dimension, given video/YouTube's strong correlation with AI citation.
## GEO Health Score
**Overall: 46 / 100**
| Dimension | Weight | Score (0–100) | Weighted | Rationale |
|---|---|---|---|---|
| Citability | 25% | 50 | 12.5 | Solid FAQ schema + Q&A headings on `/contacto`; homepage/other pages are marketing prose, not self-contained answer blocks |
| Structural Readability | 20% | 55 | 11.0 | Clean heading hierarchy; question-format H2/H3 only on `/contacto`, not site-wide |
| Multi-Modal Content | 15% | 35 | 5.25 | Good descriptive alt text; no video, no YouTube presence, no image-adjacent citable facts |
| Authority & Brand Signals | 20% | 30 | 6.0 | No `sameAs`/social links, no visible address/local-entity data live, wrong canonical/entity `url` currently live |
| Technical Accessibility | 20% | 55 | 11.0 | SSR confirmed, permissive robots.txt, fast HTTP/2 — undercut by broken canonical, broken sitemap pointer, broken og:image |
**If the already-committed domain fix (commits `a6692b7` and related) is deployed as-is**, Technical Accessibility and Authority & Brand Signals would both improve materially (est. +15–20 points combined toward Technical, +5–10 toward Authority once address data ships in structured form), pushing the overall score into the high-50s/low-60s without any new work — that deploy is by far the highest-leverage action available right now.
## AI Crawler Access Status (robots.txt, live)
| Crawler | Status |
|---|---|
| GPTBot | Allowed (wildcard `Allow: /`) |
| OAI-SearchBot | Allowed (wildcard `Allow: /`) |
| ClaudeBot | Allowed (wildcard `Allow: /`) |
| PerplexityBot | Allowed (wildcard `Allow: /`) |
| CCBot | Allowed (wildcard `Allow: /`) — no opt-out currently configured |
| anthropic-ai | Allowed (wildcard `Allow: /`) — no opt-out currently configured |
| cohere-ai | Allowed (wildcard `Allow: /`) — no opt-out currently configured |
Note: `robots.txt` itself is reachable, but its `Sitemap:` directive is broken (see Finding #2), which can hinder full-site discovery regardless of the permissive `Allow` rule.
## llms.txt Status
**Present, HTTP 200, but stale/incomplete relative to the repo's current (undeployed) version.**
- Live: 5 bullet lines, wrong canonical domain (`mnqcatering.com`), no address/area-served.
- Repo (pending deploy): 7 bullet lines, correct canonical domain, includes address and area served.
- Neither version follows the full llms.txt markdown convention (H1 + summary + linked key pages) — see Finding #4.
## Brand Mention Analysis
Not independently verified via external search/social-listening tools this pass (none available in this environment/session). On-site evidence only: **zero** `sameAs` links, **zero** social profile links (Instagram/Facebook/LinkedIn/YouTube/TikTok/X) found in the HTML of `/`, `/contacto`, `/nosotros`. This is a gap regardless of what external presence may exist, since AI entity-resolution systems weight *on-site* declared links (`sameAs`) heavily as a disambiguation signal. Recommend a follow-up pass with live search/social tools (or DataForSEO's `ai_opt_llm_ment_search`, if that MCP integration is enabled for this environment — it was not available this session) to check actual Wikipedia/Reddit/YouTube/LinkedIn mention volume before investing in new social presence.
## Platform-Specific Scores (qualitative estimate — no live scraping tool available this session)
| Platform | Estimated readiness | Basis |
|---|---|---|
| Google AI Overviews | Low-Medium | FAQPage schema present (favorable), but broken canonical/entity URL currently live undercuts trust signals |
| ChatGPT (browsing/search) | Low | No `llms.txt` linking convention, weak brand-mention surface, broken og:image would fail citation-card rendering |
| Perplexity | Low-Medium | Permissive robots.txt and clean SSR content favor crawlability; same entity/URL trust gap as above |
| Bing Copilot | Low-Medium | Same reasoning as Google AIO (shares underlying Bing index signals) |
These are directional estimates based on on-site signals only, not live AI-response testing. If DataForSEO's `ai_optimization_chat_gpt_scraper` becomes available in a future session, re-run for actual observed visibility rather than inferred readiness.
## Top 5 Highest-Impact Changes
1. **Deploy the already-committed domain fix to production** — Effort: None (code complete) / Impact: High. Fixes canonical tags, `og:url`/`og:image`, JSON-LD `url`, footer link, and the broken `robots.txt` sitemap pointer in one deploy. This is the single highest-leverage action and requires zero new development.
2. **Confirm the deployed `llms.txt` matches the repo's current version (with address + area-served) after deploy**, and reformat it to standard llms.txt markdown convention (H1, summary blockquote, linked key pages with descriptions) — Effort: Low.
3. **Add structured `address`/`areaServed`/`geo` fields to the `CateringService` JSON-LD** (not just llms.txt prose) on `/`, `/contacto`, `/nosotros` — Effort: Low, address text already sourced.
4. **Extend the `/contacto` FAQPage + question-heading pattern to the three service pages and `/nosotros`** — Effort: Medium, reuses an existing, working template.
5. **Add a `sameAs` array to the JSON-LD entity linking real social profiles** (or build a minimal video/YouTube presence if none exist) — Effort: Low if profiles exist, Medium-High if starting from zero; highest-correlation lever per the brand-mention data once other fixes ship.
## What Already Works Well
- **Genuine SSR, no hydration gap.** `render_page.py` confirms the raw HTTP response is the full page — every AI crawler sees complete content with zero JS-execution dependency.
- **Permissive `robots.txt`.** No AI crawler (GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot) is blocked; a single wildcard `Allow: /` covers everything.
- **`llms.txt` exists and is live** (HTTP 200), and the repo's pending version is well-formed content-wise (business type, services, contact channels, key pages, address, area served) even if the markdown formatting could be tightened.
- **Real `FAQPage` schema + question-based subheadings on `/contacto`**, with concise, accurate, self-contained answers — this is exactly the AEO pattern that should be replicated site-wide.
- **Descriptive, specific image alt text** throughout the homepage gallery and service cards.
- **Fast, modern hosting**: HTTP/2, `alt-svc: h3`, clean response headers, no redirect chains observed on the pages checked.
- **The hard part (root-cause domain fix) is already done in code** — the team caught and fixed the canonical-domain issue proactively; it's purely a deployment gap away from resolving several of the findings above.
@@ -0,0 +1,135 @@
# Local SEO Audit — MNQ Catering y Evento
**Audit date:** 2026-09-15
**Business:** MNQ Catering y Evento — premium catering, Local Service business type
**Address (owner-confirmed):** Calle Camino Vivero 6, 29014 Málaga, España
**Phone (owner-confirmed):** +34 678 17 15 13
## IMPORTANT — domain correction mid-audit
The audit was launched against `https://www.mnqcatering.com`, which does **not resolve** (confirmed NXDOMAIN via local resolver, and independently via the WebFetch tool's own DNS lookup — two different network paths both failed). The coordinator subsequently confirmed via WHOIS that **`mnqcatering.com` was never registered**, and that the actual canonical/live domain is **`https://www.mnqeventos.es`**.
All findings below marked **LIVE** were verified by directly fetching `https://www.mnqeventos.es` (home, `/contacto`, `/privacidad`, `/cookies`) just now. Findings marked **REPO** come from reading the Astro source in this working copy (`/home/manuel/Documentos/Proyectos/MNQ Catering y Evento`), which per the coordinator is mid-fix this session but **not yet deployed**.
**Do not conflate the two.** The repo checkout I read still has `CANONICAL_HOST = 'www.mnqcatering.com'` in `src/middleware.ts` and `@type: 'CateringService'` in `src/layouts/MainLayout.astro` (verified via `git diff` — no uncommitted changes to these files in this checkout), so whatever fix the coordinator describes (domain corrected, schema `@type` → `CateringBusiness`) exists in a different session/worktree, not in the files I inspected. I did not verify that fixed state directly — report it as coordinator-asserted, unconfirmed by me.
---
## Summary
The live site (`www.mnqeventos.es`) has a **severe, site-wide NAP and canonicalization problem** that is worse than what the local repo checkout shows: every page checked has **zero occurrences of the street address, postal code, or "Málaga"** anywhere in the HTML (visible or structured), and every canonical tag, `og:url`, and JSON-LD `url` property on every page **self-declares the domain as `www.mnqcatering.com`** — a domain that is not registered. The phone number is present and consistent. The business name has a real plural/singular inconsistency baked into the site-wide header/footer logo `alt`/`aria-label` text. The only structured data on the live site is a single `CateringService` block (not a valid schema.org type) with no address, no areaServed, no geo.
The local repo checkout is meaningfully further along (has address in footer/contacto, has `PostalAddress` + `areaServed` in schema) but still carries the invalid `CateringService` type and the same name inconsistency, and still points at `mnqcatering.com` in its middleware/config as of this checkout.
GBP is not yet created — that's an acknowledged, expected gap given where this project is in its lifecycle, not scored as a site defect per se, but it does mean there is currently zero external signal reinforcing the business entity, which makes getting the on-site canonical/NAP layer exactly right more urgent, not less.
---
## Findings
### CRITICAL
**1. [LIVE] Canonical tag, `og:url`, and JSON-LD `url` all point to an unregistered domain (`mnqcatering.com`), not the live domain (`mnqeventos.es`)**
Evidence, fetched from `www.mnqeventos.es` just now:
- `<link rel="canonical" href="https://www.mnqcatering.com/">` (present on `/`, `/contacto`, and presumably every page)
- `<meta property="og:url" content="https://www.mnqcatering.com/">`
- JSON-LD: `"url":"https://www.mnqcatering.com"`
- Footer/nav links: `href="https://www.mnqcatering.com/"` and `href="https://www.mnqcatering.com"`
This means the site's self-declared canonical identity — the single most important machine-readable signal for Google to associate the site with a future GBP listing — points at a domain that does not exist. This will confuse indexing (Google may treat the declared canonical as authoritative and effectively deprioritize/ignore the real, resolvable `mnqeventos.es` URLs) and would actively sabotage GBP verification/association once a listing is created, since the GBP website field must match a URL the site itself claims as canonical.
**Recommendation:** Fix `CANONICAL_HOST` (and every hardcoded `mnqcatering.com` reference — `astro.config.mjs` `site:`, `MainLayout.astro` fallback URL, JSON-LD `url`, footer/contacto links, `robots.txt` sitemap line, `llms.txt`) to `www.mnqeventos.es` and **deploy**. This is the single highest-priority fix on the entire site.
**2. [LIVE] No address anywhere on the live site — visible or structured**
Fetched and grepped `/`, `/contacto`, `/privacidad`, `/cookies`: "Camino Vivero", "29014", and "Málaga" each return **0 matches** across all four pages. The phone number is present (`+34 678 17 15 13`, 2–3 occurrences per page) but the address is completely absent, including from `/contacto`, which is where a user (and Google) would most expect to find it. The live JSON-LD has no `address` property and no `areaServed` at all — just `name`, `url` (wrong domain), `description`, `telephone`, `serviceType`, `contactPoint`.
**Recommendation:** Deploy whatever fixes address rendering on the live site (the repo checkout I read does have the address in `SiteFooter.astro` and `contacto.astro`, and `PostalAddress` + `areaServed` in the schema — so this may already be solved in a newer, undeployed commit). Until deployed, Google has literally nothing to anchor a "Málaga" local entity to on the live site.
**3. [REPO, and confirmed live] `@type: "CateringService"` is not a valid schema.org type**
Verified directly against schema.org's own vocabulary (fetched `schema.org/CateringService` → HTTP 404; fetched `schema.org/FoodEstablishment` subtype list and the full current JSON-LD vocabulary dump → no type or label containing "Catering" or "Caterer" exists anywhere in schema.org). This type is live on `www.mnqeventos.es` right now (confirmed in the fetched JSON-LD) and is also what's in the repo checkout I read. An unrecognized `@type` means Google's structured-data parser has no LocalBusiness subtype to key off of — no rich-result eligibility, weaker entity understanding, and no reinforcement for a future GBP category match (primary GBP category is the #1 local ranking factor per Whitespark 2026, and a wrong/missing category is the #1 negative factor).
Note: the coordinator states this was corrected to `CateringBusiness` in a fix not yet deployed. I could not verify `CateringBusiness` either way — it is **also not a standard schema.org type** as far as I could confirm (schema.org has no dedicated caterer subtype at all). The safest documented options are plain `LocalBusiness` (generic, always valid) or `FoodEstablishment` if the business wants to lean on the food-service branch, with `additionalType`/`serviceType` used to convey "catering." Whoever owns that fix should double-check `CateringBusiness` against schema.org before deploying — if it doesn't validate in Google's Rich Results Test either, it's the same problem under a new name.
### HIGH
**4. [LIVE + REPO] Business name inconsistency: "MNQ Catering y Evento" vs "MNQ Catering y Eventos"**
Confirmed on both the live site and in the repo source. The site-wide header logo (`SiteHeader.astro`) and footer logo (`SiteFooter.astro`) both use the **plural** "MNQ Catering y Eventos" in `alt` text and `aria-label` — this appears on literally every page since header/footer are global. Everywhere else — page `<title>` tags, `og:site_name`, the JSON-LD `name` property, the footer copyright line, `llms.txt` — uses the **singular** "MNQ Catering y Evento". Live grep counts on the homepage: plural form 4 occurrences (all header/footer), singular form 12 occurrences (title, meta, schema, copyright). Business Name is the "N" in NAP; an exact-match name is what Google uses to tie a website to a GBP listing. Two names in active use sitewide is a real, avoidable inconsistency.
**Recommendation:** Pick one (the schema/title form, "MNQ Catering y Evento", is the one that should become the GBP business name — it's already dominant) and fix the two `alt`/`aria-label` occurrences in `SiteHeader.astro` and `SiteFooter.astro` to match.
**5. [LIVE] No `areaServed` or `geo` in live schema (repo has `areaServed`, still no `geo`)**
Live JSON-LD has neither. The repo checkout's `MainLayout.astro` does include `areaServed` (City: Málaga + AdministrativeArea: Provincia de Málaga), which is good and correctly scoped, but geo coordinates are intentionally omitted with a code comment ("Geo coordinates not confirmed — left out") — a defensible conservative choice given they're not owner-confirmed, but it means the schema is missing a recommended property (5-decimal-precision `geo` is explicitly called out as a "recommended" LocalBusiness property). Once the physical address is confirmed usable for GBP verification, geocoding it (e.g., via a geocoding API, matched against what will eventually be entered in GBP) and adding `geo` should follow, not precede, GBP setup — don't guess coordinates.
**6. No `openingHoursSpecification` anywhere (live or repo)**
No opening hours are declared in schema, and I found no visible hours copy on the pages read. For an event-catering business without walk-in hours this is lower-urgency than for a storefront, but if there are defined business hours for phone/WhatsApp inquiries, adding `openingHoursSpecification` (or explicitly modeling this as a by-appointment/SAB business without standard hours) helps completeness.
**7. No `Service` schema per offering (Bodas, Corporativo, Reuniones Familiares)**
`bodas-reales.astro`, `corporativo-business.astro`, and `reuniones-familiares.astro` are genuinely dedicated, differentiated service pages (good — per Whitespark 2026 this is the #1 local organic ranking factor and #2 AI-visibility factor) but only carry `FAQPage` schema, not `Service` entities with their own `areaServed`/`provider` linking back to the business. Adding `Service` markup per offering (name, `areaServed`, `provider: {"@id": "...#business"}`) would strengthen this further.
### MEDIUM
**8. `/privacidad` and `/cookies` omit the physical address (repo state)**
In the repo checkout, `privacidad.astro`'s "Responsable del Tratamiento" section lists only phone and website, no street address — same for `/cookies`. Not a contradiction (nothing wrong is stated), but it's a missed reinforcement opportunity on two more indexable-by-Google pages, and for a Spain-based business, LSSI/RGPD "Responsable del Tratamiento" sections conventionally do include the operating address. Tied to finding below.
**9. `/aviso-legal` is explicitly provisional, missing NIF/CIF and registered address**
The page self-declares ("Aviso provisional pendiente de completar") that legal identity (NIF/CIF, domicilio social) is not yet finalized. This is a legal-compliance gap more than a pure local-SEO one, but it also means there is currently no page on the site carrying the formal registered-entity address that would need to match GBP's business-verification documents later. Flagging so it's on the radar before GBP verification is attempted (GBP verification frequently requires documents matching the on-site legal entity/address).
**10. `astro.config.mjs` sitemap filter excludes `/cookies` and `/privacidad` but not `/aviso-legal`**
Minor technical-SEO note found while reading: `/aviso-legal` has `robots: noindex,follow` but is not excluded from the sitemap generator, so it will appear in `sitemap-index.xml` despite being noindexed — inconsistent with how `/cookies` and `/privacidad` are handled. Not a local-SEO scoring factor but cheap to fix alongside the other config changes.
**11. No Tier-1 citation presence verifiable**
No outbound links to Yelp, TripAdvisor, Google Maps place pages, or Spain-relevant directories (e.g., Páginas Amarillas, Bodas.net, Zankyou — all commonly used by Spanish wedding/catering vendors) exist anywhere in the codebase, and none could be verified live without paid tooling. Given catering/weddings is the vertical, Bodas.net and Zankyou are more relevant citation targets for this business than the generic Yelp/BBB pair — worth prioritizing once GBP exists.
### LOW
**12. Locale signals are solid** — `<html lang="es-ES">` and `og:locale: es_ES` are consistent on both live and repo. No action needed, listed here only because it was explicitly in scope to check and it passes.
---
## Local SEO Score: 22 / 100 (live site) — repo checkout, if deployed as-is, would score materially higher (~34/100), see caveat
This score reflects the **live site** (`www.mnqeventos.es`), since that's what Google is actually crawling today. The repo checkout has a partial fix in progress (address present, `areaServed` present) but still ships the invalid schema `@type` and the wrong canonical domain in every config file I read, so it should not be treated as "done" either.
| Dimension | Weight | Live score | Weighted |
|---|---|---|---|
| GBP Signals | 25% | 5/100 | 1.25 |
| Reviews & Reputation | 20% | 30/100 | 6.0 |
| Local On-Page SEO | 20% | 30/100 | 6.0 |
| NAP Consistency & Citations | 15% | 15/100 | 2.25 |
| Local Schema Markup | 10% | 15/100 | 1.5 |
| Local Link & Authority Signals | 10% | 15/100 | 1.5 |
| **Total** | | | **~22 / 100** |
Notes on the two lowest-context dimensions:
- **GBP Signals (5/100):** No Maps embed, no place reference, no review widget, no GBP-sourced photos anywhere — expected and acknowledged, since GBP hasn't been created yet. Scored low because the checklist asks for on-page evidence of GBP integration, and there is none, not because the business did anything wrong by not having GBP yet.
- **Reviews & Reputation (30/100):** Hardcoded testimonials with decorative 5-star UI exist on the homepage and `/bodas-reales` (repo-confirmed; not independently re-verified live within the turn budget), but none are marked up as `Review`/`aggregateRating` schema, none are sourced from or attributable to a live review platform, and there is no review velocity data (no GBP yet). Counted as a trust signal, not a verifiable review asset.
---
## What already works well
- **Phone number consistency is genuinely solid**, live and in repo: `+34 678 17 15 13` (display) / `tel:+34678171513` (href) is identical across home, `/contacto`, `/privacidad`, `/cookies` on the live site.
- **Dedicated service pages exist** for the three core offerings (Bodas, Corporativo, Reuniones Familiares) rather than one generic services page — this is directionally correct per current local-SEO best practice, it just needs schema to match.
- **Locale/language signals are correct and consistent** (`es-ES`, `es_ES`) across the whole site.
- **The repo checkout is already ahead of production** on address and `areaServed` in schema — once deployed (with the domain and `@type` also fixed), several of the findings above resolve at once.
- **The catering business model (base address + event-location service) is a legitimate hybrid**, and the `areaServed` approach in the repo (City: Málaga + AdministrativeArea: Provincia de Málaga) is appropriately scoped rather than overreaching.
---
## Top 10 Prioritized Actions
1. **[Critical]** Fix every hardcoded reference to `mnqcatering.com` (canonical tag, `og:url`, JSON-LD `url`, footer/contacto links, `astro.config.mjs` `site`, `robots.txt`, `llms.txt`) to `www.mnqeventos.es`, and **deploy to production**. Verify live afterward — do not assume the repo fix is sufficient until it's actually served.
2. **[Critical]** Deploy the address/`PostalAddress`/`areaServed` fix that's in the repo checkout but not live — currently the live site has zero address signal anywhere.
3. **[Critical]** Replace the invalid `@type: "CateringService"` with a schema.org-valid type. Verify whatever replacement is chosen (including the coordinator-mentioned `CateringBusiness`) against Google's Rich Results Test before considering this closed — don't trade one invalid type for another.
4. **[High]** Fix the plural/singular brand name inconsistency in `SiteHeader.astro` and `SiteFooter.astro` (`alt`/`aria-label`) to match the singular form used everywhere else.
5. **[High]** Add `Service` schema (with `areaServed` and `provider` back-reference) to each of the three offering pages.
6. **[High]** Once the primary fixes are deployed and stable, create and verify the Google Business Profile using the exact corrected name/address/phone/URL — this is the acknowledged next external step, not a site defect.
7. **[Medium]** Add the operating address to `/privacidad`'s "Responsable del Tratamiento" section and to `/cookies` for reinforcement.
8. **[Medium]** Finalize `/aviso-legal` with NIF/CIF and registered address before attempting GBP verification, since verification documents typically need to match.
9. **[Medium]** Exclude `/aviso-legal` from the sitemap (or remove its `noindex`) to make sitemap/robots directives internally consistent.
10. **[Low]** Once GBP exists, pursue vertical-relevant citations (Bodas.net, Zankyou, Google Maps) rather than generic Yelp/BBB, which are less relevant to a Spain-based wedding/events caterer.
---
## Limitations disclaimer
- **Domain confusion mid-audit**: the audit began against `mnqcatering.com`, confirmed non-resolving via two independent DNS paths (local resolver NXDOMAIN, and WebFetch's own `getaddrinfo ENOTFOUND`), then was redirected mid-task to the real live domain `www.mnqeventos.es` per coordinator/WHOIS confirmation. All "LIVE" findings above come from directly fetching `www.mnqeventos.es` in this session; I did not have time within the turn budget to re-check every page (e.g., `/nosotros`, `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares` were read from the repo but not re-fetched live) — treat those as REPO-sourced only.
- **Could not verify the coordinator-asserted "fixed" state** (domain + `CateringBusiness` type) directly — no uncommitted diff for those files existed in this checkout (`git diff` on `src/middleware.ts`, `src/layouts/MainLayout.astro`, `astro.config.mjs` was empty), so that fix lives elsewhere (different session/worktree) and is reported as unconfirmed, not verified.
- **No GBP, no paid tools**: GBP doesn't exist yet, so review velocity, GBP category, Maps pack position, and DataForSEO/live-SERP checks are all inherently unavailable — not a site defect, just out of scope for on-page analysis.
- **Citation presence** (Yelp/BBB/Bodas.net/etc.) was checked only by absence of outbound links in source/HTML, not via direct site: searches or crawls of those third-party platforms — a false negative is possible if the business is listed there without the live site linking to it.
- **Turn-limited pass**: given the mid-task domain correction and remaining turn budget, I prioritized the highest-signal checks (canonical/NAP/schema across home + 3 legal/contact pages) over exhaustively re-fetching every service page live.
@@ -0,0 +1,112 @@
# Performance / Core Web Vitals Audit
**Important correction during this audit:** the domain named in the audit brief, `mnqcatering.com`, does not resolve on the public internet (confirmed via DoH lookups and direct curl from an unrestricted network — NXDOMAIN). The coordinator confirmed it was never registered. The actual live/canonical site is **https://www.mnqeventos.es**. All live measurements below target that domain. Note the codebase still has `mnqcatering.com` hard-coded as `astro.config.mjs`'s `site` value, which propagates into canonical tags, sitemap URLs, and the umami analytics `data-domains` attribute on every page — a correctness bug adjacent to this audit's scope (SEO/analytics), flagged here because it was discovered while investigating why "live" checks were failing.
## Tooling used
- **PageSpeed Insights / CrUX API**: unavailable. No Google API key is configured in this environment (`~/.config/claude-seo/google-api.json` absent, `GOOGLE_API_KEY` unset — confirmed via `google_auth.py --check`, tier `-1`). No field data (CrUX) or PSI-hosted lab data could be retrieved.
- **Lighthouse 13.4.1 (via `npx lighthouse`)**: available and used directly against the live site. Mobile form factor, simulated throttling (Lighthouse's standard mobile lab preset). This is **lab data from a single run**, not field data — treat as directionally reliable, not as the CrUX 75th-percentile figure Google actually scores against.
- **curl**: used for real TTFB/timing and raw-header checks.
- Static source inspection of the Astro codebase (`src/pages`, `src/styles/animations.css`, built HTML) to explain *why* the lab numbers look the way they do.
Pages tested: homepage (`/`), `/bodas-reales`, `/corporativo-business`. A `/corporativo-business` Lighthouse run was queued but not completed before the turn budget ran out — that page's numbers below are from HTML/resource inspection only, not a Lighthouse run.
## Summary
Core Web Vitals are **mixed**: CLS and INP-proxy (TBT) are in great shape (image dimensions and lazy-loading from the prior remediation round are working correctly). LCP is the weak point on both pages measured with Lighthouse — homepage 3.4s (needs improvement), `/bodas-reales` 4.3s (poor) — driven mostly by **element render delay**, not by slow image download. Root causes found: a render-blocking, half-unused CSS file loaded on every page, a duplicated/blocking Google Fonts `<link>` that undermines the earlier preload+swap fix, a CSS `animation-delay` applied directly to the LCP heading, no text compression on the HTML document, and very large below-the-fold images (up to 246 KB each) that inflate total page weight even though they aren't the LCP element.
## Measured Core Web Vitals (Lighthouse lab data, mobile, simulated throttling)
| Page | Performance score | LCP | CLS | TBT (INP proxy) | FCP | Speed Index |
|---|---|---|---|---|---|---|
| `/` (home) | 84/100 | **3.4 s** (needs improvement) | 0 (good) | 0 ms (good) | 2.9 s | 4.4 s |
| `/bodas-reales` | 78/100 | **4.3 s** (poor) | 0 (good) | 0 ms (good) | 3.0 s | 4.5 s |
| `/corporativo-business` | not run (turn budget) | not measured | not measured | not measured | not measured | not measured |
Real TTFB measured via curl (not Lighthouse, actual network round-trip from this environment):
| Page | TTFB | Total transfer time | HTTP version |
|---|---|---|---|
| `/` | 186 ms | 229 ms | HTTP/2 |
| `/bodas-reales` | 180 ms | 222 ms | HTTP/2 |
| `/corporativo-business` | 218 ms | 269 ms | HTTP/2 |
TTFB is good on all three (well under the ~600ms "poor" territory Lighthouse itself flags server response at 67-70ms in its own trace). Server response time is not the bottleneck.
## Findings
### 1. LCP element render delay dominates load time on home (2.18s of the 3.4s LCP) — Severity: High
**Evidence:** Lighthouse's `lcp-breakdown-insight` on the homepage identifies the LCP element as the hero `<h1>` ("MNQ: donde la tradición se encuentra con la exclusividad"), not the hero image. Breakdown: TTFB 187ms, **element render delay 2,179ms**. The `<h1>` carries class `hero-enter-2`, and `src/styles/animations.css` defines:
```
.hero-enter-1 { animation-delay: 200ms; }
.hero-enter-2 { animation-delay: 500ms; }
.hero-enter-3 { animation-delay: 780ms; }
.hero-enter-4 { animation-delay: 1050ms; }
```
The LCP text is intentionally held invisible (fade/slide-in) via `animation-delay` before it can paint, on top of the render-blocking CSS below. This single change is likely the highest-leverage LCP fix available.
**Recommendation:** Remove the entrance animation (or at least `animation-delay`) from whichever element Lighthouse marks as LCP — do not delay-hide the first paint of hero text/heading. Decorative stagger animations should be reserved for secondary/below-the-fold content, or use a technique that doesn't hide the LCP candidate from the paint timeline (e.g. animate `transform`/opacity only after `DOMContentLoaded` on non-LCP siblings).
### 2. Render-blocking, half-unused CSS file loaded on every page — Severity: High
**Evidence:** Every page checked (`/`, `/bodas-reales`, `/corporativo-business`) loads `<link rel="stylesheet" href="/_astro/aviso-legal.xNce9nS9.css">` unconditionally. Lighthouse: 24.4 KB transfer, 450ms added to the render-blocking critical path on the homepage, and `unused-css-rules` reports **12 KB (roughly half the file) unused** on pages that aren't `/aviso-legal`. `network-dependency-tree-insight` shows this CSS file as the longest critical-path dependency (336ms chain). This looks like an Astro CSS-bundling side effect (the legal-notice page's styles are being emitted into a chunk that ends up referenced from the global layout) rather than intentional per-page CSS splitting.
**Recommendation:** Investigate why `aviso-legal`-scoped CSS is bundled into the shared/global stylesheet reference instead of being page-scoped. Astro normally scopes component styles per page automatically; this typically means a shared import (e.g. a global layout or `<style is:global>` block) is pulling in styles that belong only to the legal-notice page. Splitting it out removes ~450ms from the critical path and ~12 KB of dead weight on every non-legal page.
### 3. Google Fonts stylesheet is loaded twice — once correctly deferred, once still blocking — Severity: Medium
**Evidence:** In the built `<head>` on all three pages:
```html
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?...&display=swap" onload="this.onload=null;this.rel='stylesheet'">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?...&display=swap">
```
The preload+swap pattern from the prior remediation round is present and correct — but it's immediately followed by a **second, plain `<link rel="stylesheet">` to the exact same URL**, which is a standard render-blocking stylesheet request. The preload/swap trick only helps if the *only* reference to that stylesheet is the deferred one; the duplicate blocking link re-introduces the exact render-blocking behavior the preload was meant to avoid (browsers will still block rendering on a `rel=stylesheet` link regardless of a sibling preload for the same resource).
**Recommendation:** Remove the plain `<link rel="stylesheet">` duplicate. The correct pattern needs a `<noscript>` fallback for the no-JS case, not a second always-present blocking link:
```html
<link rel="preload" as="style" href="..." onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="..."></noscript>
```
This is a regression/incomplete application of the earlier font fix and should be quick to correct.
### 4. No text compression on the HTML document — Severity: Medium
**Evidence:** `document-latency-insight` on the homepage: `usesCompression: false`, 16,780 uncompressed bytes, ~16 KB estimated savings. Confirmed independently: `curl -D -` response headers show no `Content-Encoding` header at all (no gzip/br). This is server/hosting config (Node/Astro `output: 'server'` via `@astrojs/node` standalone adapter, per `astro.config.mjs`), not a code-level fix in the page templates.
**Recommendation:** Enable gzip or brotli compression at whatever sits in front of the Node adapter (reverse proxy/CDN — check the Dockerfile/nixpacks deployment path) or via Node-level compression middleware if nothing is in front of the app. Brotli preferred for text assets.
### 5. Large below-the-fold images inflate total page weight (not the LCP element, but still real) — Severity: Medium
**Evidence:** `image-delivery-insight` on the homepage flags six images totaling ~606 KB of estimated savings, none of which is the LCP element:
- Services-grid images: 246 KB, 222 KB, 218 KB (each ~70-80% wasted via better compression and serving at display size instead of native size — e.g. a 635×848 source shown at 723×485 or a 576×768 source shown at 870×485)
- Header logo: 41.6 KB total, but only **~1.5 KB actually needed** — it's a 600×232 source image displayed at 93×36 (40.6 KB wasted on oversizing alone)
- Hero background image itself: 75.9 KB, 45.5 KB potential savings from better compression (this one *is* near the LCP path but is not the identified LCP element on mobile)
These are properly `loading="lazy"`/`decoding="async"` (confirmed in HTML — the prior lazy-loading fix is intact) so they don't block first paint, but they add real network/decode cost and count toward total page weight, which matters for INP on lower-end devices and for users who scroll quickly.
**Recommendation:** Serve the header logo at its actual display size (93×36 → a ~2-4 KB asset, not 41 KB) or use `srcset`. Re-export the services-grid and gallery images at their real display dimensions with higher WebP/AVIF compression — 70-80% savings available with no visible quality loss per Lighthouse's compression estimate.
### 6. Forced reflow from inline script — Severity: Low
**Evidence:** `forced-reflow-insight` flags 85ms of forced synchronous layout attributed to an inline `<script>` on the homepage (line 32 of the rendered HTML — one of the `type="module"` inline scripts). Not large enough to move TBT off 0ms in this lab run, but worth a look since forced reflows scale badly on low-end mobile CPUs (this lab run used simulated, not literal CPU, throttling).
**Recommendation:** Identify the script reading a geometric property (`offsetWidth`, `getBoundingClientRect`, etc.) right after a DOM/class mutation and batch reads before writes, or move the read to `requestAnimationFrame`.
### 7. `/corporativo-business` not fully measured — Severity: N/A (coverage gap)
**Evidence:** A live Lighthouse run for this page did not complete before the turn budget was reached. Static inspection of its built HTML shows the same render-blocking `aviso-legal.css`, the same duplicated Google Fonts link, and a hero image (`foto-corporativo.jpg`, JPG not WebP, unlike the homepage's generated hero) marked `loading="eager" fetchpriority="high"` with explicit `width`/`height` — dimensions and priority hints look correct, but its LCP timing and image weight were not independently measured.
**Recommendation:** Re-run `npx lighthouse https://www.mnqeventos.es/corporativo-business --only-categories=performance --form-factor=mobile` to get real numbers before treating this page as verified. Given it shares the site-wide CSS/font issues above, expect it to score similarly to `/bodas-reales`, but the `foto-corporativo.jpg` being a plain JPG (not `.webp`) rather than passed through the same `generated/*.webp` image pipeline as other hero images is worth checking specifically — it may be the LCP element on this page.
## What already works well
- **Image dimensions and lazy-loading (prior remediation round confirmed intact):** every non-hero `<img>` on all three pages has explicit `width`/`height` attributes and `loading="lazy" decoding="async"`; hero images correctly use `loading="eager" fetchpriority="high"`. This is reflected in the measured **CLS = 0** on both pages tested — no layout-shift issues found.
- **TBT = 0ms** on both measured pages — no long main-thread JavaScript tasks; scripts are `type="module"` (deferred by default) or `async defer` (the umami analytics tag). INP is very unlikely to be a problem based on this.
- **Server response time is fast:** 67-70ms per Lighthouse's own trace, 180-220ms real TTFB via curl including full TLS handshake — server/hosting is not a bottleneck.
- **HTTP/2 in use**, `preconnect` hints present for the Google Fonts origins, `font-display: swap` requested in the Fonts API URL — the *mechanism* of the prior font fix is correct, only the duplicate blocking link (finding 3) undermines it.
- **No redirect chains** on the document request (`document-latency-insight`: `noRedirects: true`).
## Overall performance score
- **Homepage: 84/100** (Lighthouse mobile lab, measured)
- **`/bodas-reales`: 78/100** (Lighthouse mobile lab, measured)
- **`/corporativo-business`: not measured** — estimated in the high-70s/low-80s range based on shared template issues (CSS/font duplication) but this is an **estimate, not a measurement**, and should not be treated as verified.
These are single-run lab scores, not the CrUX field 75th-percentile Google actually uses for Core Web Vitals pass/fail — no field data was obtainable in this environment (no API credentials configured). If a Google Search Console / PageSpeed Insights API key becomes available, re-run `pagespeed_check.py` for field-data confirmation, especially since real-user LCP on a range of devices/networks could differ meaningfully from this single simulated-throttling lab run.
## Priority order for fixes
1. Remove `animation-delay` from the LCP heading (finding 1) — single highest-leverage change, likely worth ~0.5-2s of LCP.
2. Fix the duplicate render-blocking Google Fonts `<link>` (finding 3) — quick, low-risk.
3. Investigate/fix the `aviso-legal.css` bundling leak (finding 2) — removes 450ms render-blocking + 12KB dead weight sitewide.
4. Enable HTML compression at the hosting/proxy layer (finding 4).
5. Re-compress and right-size the flagged images (finding 5) — lower urgency since they're lazy-loaded and off the LCP path, but real savings for total page weight.
6. Complete a Lighthouse run for `/corporativo-business` to close the coverage gap (finding 7).
@@ -0,0 +1,161 @@
# Structured Data (JSON-LD) Audit — mnqcatering.com
**Audited:** 2026-09-15
**Method:** Source review (`src/layouts/MainLayout.astro`, `src/pages/*.astro`) cross-checked against the actual SSR output. Live `https://www.mnqcatering.com` was not directly reachable from this environment (no outbound DNS/network), so the site's own Node/Astro SSR server (`@astrojs/node`, `output: 'server'`) was built and run locally against the committed HEAD (`0e242a6`, working tree clean for `src/`), and pages were requested with `Host: www.mnqcatering.com` to reproduce byte-identical rendered HTML for `/`, `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares`, `/contacto`. This is equivalent to fetching the live pages for structured-data purposes since output is fully server-rendered (no client-side JSON-LD injection to compare against — `raw` and `rendered` HTML are the same thing here).
## Summary
Every page emits one sitewide JSON-LD block (business identity) via `MainLayout.astro`, plus a page-specific `FAQPage` block on four pages. Both blocks are syntactically valid JSON, use `https://schema.org` as `@context`, and (for FAQPage) mirror the visible on-page FAQ content — no invisible/mismatched schema found. However, the sitewide block uses **`@type: "CateringService"`, which is not a valid schema.org type** — this is a critical defect that likely causes the whole block to be ignored or mis-typed by Google and other consumers. There's also a non-standard property (`serviceType`) riding on the invalid type. `BreadcrumbList`, `image`, `priceRange`, `geo`, and `sameAs` are all missing opportunities. FAQPage markup is correctly kept per the current no-rich-result policy (see below).
## Detection Results
| Page | Blocks found |
|---|---|
| `/` (home) | 1× `CateringService` (site-wide) |
| `/bodas-reales` | 1× `CateringService` + 1× `FAQPage` (3 Q&A) |
| `/corporativo-business` | 1× `CateringService` + 1× `FAQPage` (3 Q&A) |
| `/reuniones-familiares` | 1× `CateringService` + 1× `FAQPage` (3 Q&A) |
| `/contacto` | 1× `CateringService` + 1× `FAQPage` (3 Q&A) |
| `/nosotros`, `/aviso-legal`, `/privacidad`, `/cookies` | 1× `CateringService` only (no page-specific schema — expected, no FAQ content on these) |
Format: JSON-LD only (no Microdata/RDFa found), injected via `<script is:inline type="application/ld+json" set:html={JSON.stringify(schema)} />` in `MainLayout.astro:137`. Correctly server-rendered (present in raw HTML, not client-injected).
## Validation Results
### 1. Sitewide business block — `@type: "CateringService"` — **FAIL (Critical)**
**Evidence** (identical on every page, e.g. homepage):
```json
{
"@context": "https://schema.org",
"@type": "CateringService",
"name": "MNQ Catering y Evento",
"url": "https://www.mnqcatering.com",
"description": "Servicio de catering para bodas, eventos corporativos y reuniones familiares con enfoque premium.",
"telephone": "+34 678 17 15 13",
"serviceType": ["Bodas", "Eventos corporativos", "Reuniones familiares"],
"address": { "@type": "PostalAddress", "streetAddress": "Calle Camino Vivero, 6", "postalCode": "29014", "addressLocality": "Málaga", "addressRegion": "Málaga", "addressCountry": "ES" },
"areaServed": [{ "@type": "City", "name": "Málaga" }, { "@type": "AdministrativeArea", "name": "Provincia de Málaga" }],
"contactPoint": { "@type": "ContactPoint", "contactType": "customer service", "telephone": "+34 678 17 15 13", "availableLanguage": ["es"] }
}
```
**Problem:** `CateringService` does not exist in the schema.org vocabulary. The correct type for a catering business is **`CateringBusiness`**, a `LocalBusiness` → `FoodEstablishment` subtype (schema.org/CateringBusiness). Because `CateringService` isn't a recognized type, Google's Rich Results Test / structured data parsers will either flag it as an unrecognized type or silently drop type-specific interpretation, and any generic-type fallback loses `LocalBusiness` inheritance (`address`, `telephone`, `geo`, `openingHoursSpecification`, `priceRange`, `image` all become meaningless without a valid business type backing them).
A second, compounding issue: `serviceType` is a property of schema.org's `Service` type, not of `LocalBusiness`/`FoodEstablishment`/`CateringBusiness`. Even after fixing the `@type`, `serviceType` would still be an out-of-vocabulary property on this type. The three service lines (Bodas, Eventos corporativos, Reuniones familiares) are better modeled as `makesOffer` → `Offer.itemOffered` → `Service` entities, or dropped from the top-level entity and left for each landing page's own content/FAQ.
**Recommendation — fix `@type` to `CateringBusiness` and restructure services in `MainLayout.astro`:**
```json
{
"@context": "https://schema.org",
"@type": "CateringBusiness",
"name": "MNQ Catering y Evento",
"url": "https://www.mnqcatering.com",
"description": "Servicio de catering para bodas, eventos corporativos y reuniones familiares con enfoque premium.",
"telephone": "+34678171513",
"priceRange": "$$$",
"image": "https://www.mnqcatering.com/images/foto-bodas.jpg",
"address": {
"@type": "PostalAddress",
"streetAddress": "Calle Camino Vivero, 6",
"postalCode": "29014",
"addressLocality": "Málaga",
"addressRegion": "Málaga",
"addressCountry": "ES"
},
"areaServed": [
{ "@type": "City", "name": "Málaga" },
{ "@type": "AdministrativeArea", "name": "Provincia de Málaga" }
],
"contactPoint": {
"@type": "ContactPoint",
"contactType": "customer service",
"telephone": "+34678171513",
"availableLanguage": ["es"]
},
"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" } }
]
}
```
Notes on this snippet:
- `telephone` normalized to E.164 (`+34678171513`, no spaces) — more consistently parsed than `"+34 678 17 15 13"` (minor, non-blocking, but worth fixing while editing this block anyway).
- `priceRange` is a placeholder pattern (`"$$$"`) — replace with a real value the business is comfortable publishing, or omit if there's no defensible public price band yet. Do **not** ship a placeholder string.
- `image` currently points at an existing OG image already used elsewhere in the layout (`ogImage` default) — reuse rather than invent a new asset, but confirm it visually represents the business (a plated dish or venue photo would be preferable to a wedding hero if one exists).
- `geo`, `sameAs`, `aggregateRating` intentionally omitted here — see dedicated sections below (all pending real data, not fabricated).
### 2. `FAQPage` on 4 pages — **PASS (structurally), Info-priority per current Google policy**
**Evidence:** `bodas-reales.astro`, `corporativo-business.astro`, `reuniones-familiares.astro`, `contacto.astro` each emit a `FAQPage` with 3 `Question`/`acceptedAnswer` pairs. Checked against rendered output — all 3 Q&A pairs on each page are also rendered as visible `<article class="faq-item">` content in the same page, so there's no hidden/mismatched-content violation.
**Structural validation:**
- ✅ `@context: "https://schema.org"`
- ✅ `@type: "FAQPage"`, nested `Question`/`Answer` types correct
- ✅ Required properties present (`mainEntity`, `name`, `acceptedAnswer.text`)
- ✅ No placeholder text
- ✅ Content matches visible page content
**Policy note (per current Google guidance):** Google retired FAQ rich results for all sites (May 7, 2026), so this markup no longer produces a SERP rich result. Per current guidance this is **Info priority, not a defect** — keep it in place, since it still aids AI/LLM citation and entity/answer extraction (ChatGPT, Perplexity, Gemini, AI Overviews). No action required; do not remove it, and do not add more `FAQPage` blocks expecting SERP benefit — any future FAQ-style page should be evaluated as GEO/AI-visibility content, not a rich-result play.
One structural nit worth a look: these are genuinely marketing FAQ content (pricing/coverage questions the business anticipates), not a user-generated Q&A page, so `FAQPage` (not `QAPage`) is the correct type choice here — no change needed.
### 3. Missing: `BreadcrumbList` — **Opportunity (Medium)**
**Evidence:** No `BreadcrumbList` found on any page. Google supports breadcrumb rich results (still active, not deprecated), and the site has a clear, shallow hierarchy (`Home > Bodas Reales`, `Home > Corporativo & Business`, `Home > Reuniones Familiares`, `Home > Contacto`) that maps directly to nav (`SiteHeader.astro` `activeNav`).
**Recommendation** (example for `/bodas-reales`):
```json
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Inicio", "item": "https://www.mnqcatering.com/" },
{ "@type": "ListItem", "position": 2, "name": "Bodas Reales", "item": "https://www.mnqcatering.com/bodas-reales" }
]
}
```
Repeat per page with the matching second crumb (`Corporativo & Business` → `/corporativo-business`, `Reuniones Familiares` → `/reuniones-familiares`, `Contacto` → `/contacto`). Cheapest way to add this: compute it in `MainLayout.astro` from the existing `activeNav`/`title` props and pass it into the `structuredDataScripts` array alongside the FAQ block, rather than hand-writing it on each page.
### 4. Missing: `geo` (GeoCoordinates) — **Acknowledged, correctly deferred**
Confirmed absent from the `address` block. Per the known-state note, this is intentionally withheld pending a confirmed Google Business Profile pin rather than an oversight — correct call; do not fabricate lat/long. Once available:
```json
"geo": { "@type": "GeoCoordinates", "latitude": 36.xxxxx, "longitude": -4.xxxxx }
```
### 5. Missing: `sameAs` — **Acknowledged, correctly deferred**
No social profile URLs in the schema, matching the known state (no confirmed profiles yet). Do not add placeholder/guessed URLs. Once Instagram/Facebook/LinkedIn profiles are confirmed live and owned by the business:
```json
"sameAs": ["https://www.instagram.com/<handle>", "https://www.facebook.com/<handle>"]
```
### 6. Missing: `Review` / `AggregateRating` — **Acknowledged, correctly deferred**
No review schema present, matching known state. **Do not add this without real, verifiable reviews** — `AggregateRating`/`Review` markup requires genuine user-submitted reviews per Google's structured data policy; fabricating or estimating a rating is a policy violation that can trigger a manual action. Revisit once real reviews exist (Google Business Profile, testimonials with attribution, etc.).
### 7. Duplicate sitewide block per page — **Info, not a defect**
Every page repeats the full `CateringBusiness`/`CateringService` block rather than referencing a single `@id`-linked entity via `@graph`. This is common and acceptable practice for a small static-ish site (each page is self-contained for crawlers that don't execute JS or follow references), so not flagged as an issue — but if the block grows substantially (e.g., after adding `makesOffer`, `geo`, `sameAs`, `image`), consider consolidating into a `@graph` with `@id` references from per-page `WebPage`/`FAQPage` nodes to avoid repeating a large block on every request. Not urgent.
## Score: 62 / 100
**Deductions:**
- −25: Invalid `@type` (`CateringService` doesn't exist) on the one schema block present on every page of the site — this is the single highest-impact fix available, since it currently likely undermines rich-result/entity recognition for the whole business identity block.
- −5: Non-standard `serviceType` property riding on that invalid type.
- −5: `telephone` not in E.164 format (minor/cosmetic).
- −3: No `BreadcrumbList` despite a hierarchy that trivially supports it.
**Not deducted** (correctly deferred, not defects): missing `geo`, `sameAs`, `Review`/`AggregateRating` — all withheld pending real data, which is the right call rather than fabricating values.
## What already works well
- **JSON-LD only**, no legacy Microdata/RDFa to reconcile — clean baseline.
- **`https://` context**, absolute URLs throughout, ISO-correct address structure.
- **Server-rendered**, present in raw HTML (not client-injected) — fully crawlable without JS execution.
- **FAQ schema content matches visible page content exactly** — no hidden-text schema abuse anywhere.
- **Correct restraint** on `geo`, `sameAs`, and `AggregateRating` — nothing fabricated or guessed to fill gaps, which is exactly right per Google's structured-data policies.
- **No deprecated types used** (no `HowTo`, `SpecialAnnouncement`, `CourseInfo`, etc.).
- Address, `areaServed`, and `contactPoint` are properly structured and consistent across every page.
@@ -0,0 +1,87 @@
# Sitemap Architecture Audit — mnqeventos.es (canonical live domain)
Date: 2026-09-15
Scope: live sitemap at `https://www.mnqeventos.es/sitemap-index.xml`, `src/pages/` route set, `astro.config.mjs`, `src/middleware.ts`, `@astrojs/sitemap` output.
## Correction from earlier pass
An earlier pass of this audit targeted `https://www.mnqcatering.com/sitemap-index.xml`. That domain is confirmed **not registered** (DNS `NXDOMAIN` on two resolvers, WHOIS "no match" for `MNQCATERING.COM`) — this was not a sandbox artifact, it's genuinely unregistered. The actual canonical, live, registered production domain is **`https://www.mnqeventos.es/`**. This report re-audits against that domain, checked live.
## Summary — what's actually live right now
Live-fetched and verified directly (not from local build):
- `https://www.mnqeventos.es/sitemap-index.xml` → **HTTP 200**, valid XML, but its one `<sitemap><loc>` entry points to **`https://www.mnqcatering.com/sitemap-0.xml`** — i.e. the sitemap index is still wired to the old, unregistered domain.
- Trying to actually fetch `https://www.mnqcatering.com/sitemap-0.xml` (the URL the live index points to) fails: `Could not resolve host`. **The referenced sub-sitemap is unreachable — Googlebot cannot follow the index to any URL list.**
- `https://www.mnqeventos.es/sitemap-0.xml` (fetched directly, not via the index) does return HTTP 200 and 7 `<url>` entries, but **every `<loc>` inside it is still `https://www.mnqcatering.com/...`** — none of them use the live `mnqeventos.es` domain. Even a crawler that finds this file by luck gets a list of 7 dead URLs.
- `https://www.mnqeventos.es/robots.txt` → live, `Sitemap:` line still points to `https://www.mnqcatering.com/sitemap-index.xml`.
- `https://mnqeventos.es/` (bare apex, no `www`) did not respond in this environment (connect/timeout) — could not confirm apex→www redirect behavior live.
**Net effect: right now, in production, the sitemap infrastructure at the real domain is 100% non-functional.** The index file exists and is valid XML, but every path a crawler can take from it (via `<sitemap><loc>`, or via `robots.txt`, or by url-list entries once inside `sitemap-0.xml`) terminates at the unregistered `mnqcatering.com` domain.
## Codebase state vs. deployed state
The source code has already been fixed, but **the fix is not deployed**:
- `astro.config.mjs:6` → `site: 'https://www.mnqeventos.es'` (correct).
- `src/middleware.ts:3` → `const CANONICAL_HOST = 'www.mnqeventos.es';`, with an explicit comment: *"www.mnqeventos.es is the real, registered, live production domain. mnqcatering.com was an ... do NOT set CANONICAL_HOST back to it..."*
- This fix is **committed**: `git log` shows commit `a6692b7` — `fix(seo): correct canonical domain to www.mnqeventos.es` — at `2026-09-15 10:07:24 +0200` (today, this session).
- A local `astro build` run against the current source produces a **correct** `dist/client/sitemap-0.xml` with all 7 `<loc>` entries on `https://www.mnqeventos.es/...`.
- Conclusion: the commit is real and correct, but the running production deployment predates it and is serving a stale build. **This is a deploy/release gap, not a remaining code defect.**
## Findings
### 1. Live sitemap index points to a dead sub-sitemap on an unregistered domain
- **Severity:** Critical
- **Evidence:** live `https://www.mnqeventos.es/sitemap-index.xml` → `<loc>https://www.mnqcatering.com/sitemap-0.xml</loc>`; fetching that URL fails to resolve.
- **Recommendation:** Deploy the already-committed fix (`a6692b7`) to production. Until deployed, Search Console will report the submitted sitemap as unreachable/errored, and no URLs from this site are discoverable via sitemap at all.
### 2. Live sub-sitemap URLs all reference the unregistered domain
- **Severity:** Critical
- **Evidence:** `https://www.mnqeventos.es/sitemap-0.xml` (live, HTTP 200) lists all 7 URLs as `https://www.mnqcatering.com/...`.
- **Recommendation:** Same fix/deploy as above resolves this; the local rebuilt `dist/client/sitemap-0.xml` already generates correct `mnqeventos.es` URLs from current source.
### 3. `robots.txt` still points to the dead domain's sitemap
- **Severity:** High
- **Evidence:** live `https://www.mnqeventos.es/robots.txt` → `Sitemap: https://www.mnqcatering.com/sitemap-index.xml`.
- **Recommendation:** Confirm `public/robots.txt` in source now reads correctly (it's generated from the same `site` config via `@astrojs/sitemap`/Astro, so it should self-correct once redeployed) and redeploy.
### 4. Noindexed URL present in sitemap — `/aviso-legal/` (unchanged by the domain fix)
- **Severity:** High
- **Evidence:** `src/pages/aviso-legal.astro:8` sets `robots="noindex,follow"` (page is an explicitly-labeled placeholder pending final legal data), but `astro.config.mjs`'s sitemap filter only excludes `/cookies/` and `/privacidad/`, not `/aviso-legal/`. It's present in both the stale live sitemap and the freshly rebuilt one.
- **Recommendation:** Add `/aviso-legal/` to the sitemap filter, or remove `noindex` once the page's legal content is finalized.
### 5. Apex domain redirect unverified live
- **Severity:** Medium
- **Evidence:** `https://mnqeventos.es/` (no `www`) did not respond from this environment; could not confirm live 301 behavior to `www`.
- **Recommendation:** Verify from an unrestricted network: `curl -I https://mnqeventos.es/` should 301 to `https://www.mnqeventos.es/`.
### 6. Trailing-slash canonical inconsistency risk (code-level, still present after the domain fix)
- **Severity:** Medium
- **Evidence:** `astro.config.mjs` doesn't set `trailingSlash`; canonical tag in `src/layouts/MainLayout.astro:34` is built from `Astro.url.pathname` (the live request path), so `/aviso-legal` and `/aviso-legal/` could both 200 with differing self-referencing canonicals, while the sitemap only lists the trailing-slash form.
- **Recommendation:** Set `trailingSlash: 'always'` and ensure the middleware/hosting layer redirects the non-slash form.
## XML validity
- `sitemap-index.xml` and `sitemap-0.xml`, both live and locally-rebuilt versions: well-formed XML, correct namespaces, no `priority`/`changefreq` clutter.
- 7 URLs total — nowhere near the 50,000-URL limit; single-file index is appropriate.
## Quality gates (location pages)
Not applicable — 0 location pages, no programmatic page generation.
## What already works well
- The domain-migration bug is **already fixed in source and committed** (`a6692b7`) — this is a deploy-pipeline gap, not unresolved engineering work.
- `/cookies/` and `/privacidad/` are correctly excluded from the sitemap and both carry matching `robots="noindex,follow"` — keep this as-is.
- No deprecated `priority`/`changefreq` tags.
- Sitemap-index wrapper used despite low URL count — future-proof.
- No dynamic/programmatic routes, so no doorway-page risk.
## Score: 25 / 100 (live, as currently deployed)
The live sitemap infrastructure is currently non-functional end-to-end (index → sub-sitemap → robots.txt all point to an unregistered domain), which is as severe as it gets for this checklist even though the underlying code quality is otherwise reasonable. **This score will jump to roughly 75/100 immediately upon redeploying the already-committed fix** — the only remaining code-level issues at that point are the `/aviso-legal/` noindex contradiction (High) and the trailing-slash canonical gap (Medium), both pre-existing and unrelated to the domain migration.
## Immediate action
Redeploy production from current `master` (commit `a6692b7` or later) so the live sitemap, sub-sitemap, and `robots.txt` all resolve to `mnqeventos.es`. This is the single highest-impact fix available right now.
@@ -0,0 +1,149 @@
# SXO Audit — mnqeventos.es (MNQ Catering y Evento)
**Audited URL:** https://www.mnqeventos.es/ (live, verified 2026-09-15)
**Pages in scope:** `/` (home), `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares`
**Target keywords:** "catering bodas Málaga", "catering eventos corporativos Málaga", "catering premium Málaga"
**Method:** Live fetch via `render_page.py --mode auto` + `parse_html.py`, cross-referenced against real Google SERP results (WebSearch) and one competitor page inspection (WebFetch, laborraja.com).
> **Note on domain history:** the original audit target `mnqcatering.com` is an unregistered domain (WHOIS: no match, NXDOMAIN everywhere). The correct live site is `www.mnqeventos.es`. This was confirmed live and used for this audit.
---
## Critical technical caveat (outside SXO scope, but blocks everything below)
**Every page in scope currently self-references the wrong, unregistered domain** in `<link rel="canonical">`, `og:url`, `og:image`, `twitter:image`, and the `CateringService` JSON-LD `url` field — all point to `https://www.mnqcatering.com/...`, which does not resolve (NXDOMAIN). The footer also displays the text link `www.mnqcatering.com`.
This means Google's current understanding of "the real URL" for every page it has crawled points at a dead host. No amount of SXO/on-page work matters if canonical/indexing signals are broken — **this should be fixed and redeployed before any other action in this report is prioritized.** The orchestrator noted this is already corrected in the codebase and pending deployment; flagging here because it is what the *live* site still shows as of this audit. Recommend `/seo page` or a technical-SEO pass to confirm the fix covers canonical, OG, Twitter Card, and JSON-LD `url` fields consistently across all templates before redeploying.
---
## Summary
MNQ's four core pages are **structurally the right page type** — they closely follow the "Service Page" pattern (process/methodology sections, FAQ, testimonials, contact CTA) that dominates the real SERP for these keywords, which is good news: this is not a page-type mismatch requiring a rebuild. The real gap is a **content-completeness and local-anchoring gap**: the pages never mention "Málaga," never state a service area, never give any pricing anchor (not even a "desde X€/persona" range), and never state guest-capacity ranges. Real competitors ranking for the same terms (La Borraja, directories like bodas.net/celebrents.es, and a dedicated "cuánto cuesta un catering de boda en Málaga" guide) either saturate the page with location keywords, publish price ranges, or both. MNQ's copy is polished and emotionally strong (real named-couple testimonials, venue names, sensory dish descriptions) but reads as premium-generic rather than answering the two questions every first-time visitor actually has before contacting: **"Do they cover my area?"** and **"Is this within my budget?"**
**SXO Gap Score: 59/100** (Needs Work — see breakdown below; separate from any SEO Health Score).
---
## SERP Analysis
Searched: "catering bodas Málaga premium", "catering eventos corporativos Málaga", "catering bodas Málaga precio".
| Signal | Observation |
|---|---|
| Dominant result type | Mixed: ~45% marketplace/directory pages (bodas.net, celebrents.es, cateringclick.com, encuentratucatering.es — **Comparison/Local-directory type**), ~45% individual competitor **Service Pages** with strong local anchoring (La Borraja, Smart Catering Málaga, Gorest, Alejandra Catering, Top Food, La Monarca, Catering Lepanto), ~10% informational/price-guide content (Alejandra Catering's "¿Cuánto cuesta realmente un catering de boda en Málaga?"). |
| Location saturation | Competitor pages mention "Málaga"/"Costa del Sol" 15+ times each (verified on laborraja.com), including named venues (Archidona, Marbella, Ronda, Churriana). MNQ's 4 pages: **0 mentions of Málaga/Costa del Sol/Andalucía** in body copy, headings, or schema. |
| Pricing signal | Multiple ranking pages/directories display explicit price ranges (€69–153/person, avg €70–109/person) or a whole article dedicated to cost breakdown. This is a real, rankable, expected content angle Google is rewarding. MNQ shows **no number anywhere**, on any of the 4 pages — three near-identical FAQ answers just say "se calcula a medida." |
| Trust signals on competitors | Even top competitors mostly lack chef bios/certifications too (La Borraja has none) — so MNQ's 2 named-couple testimonials with real venue names on `/bodas-reales` are already **above competitor baseline** on this specific dimension. |
| Local pack / NAP | Directories imply strong local-intent SERP; MNQ has PostalAddress/`addressLocality: Málaga` only on `/contacto` (outside audit scope) — none of the 4 in-scope pages carry any local business schema or address. |
**Dominant SERP page type: Service Page with Local Page characteristics** (location-saturated, venue-specific, sometimes with directory/comparison competition layered on top).
---
## Page-Type Classification & Mismatch Severity
| Page | Classification (taxonomy) | vs. SERP dominant type | Mismatch severity |
|---|---|---|---|
| `/` (home) | Service Page hub (hero + CTA + 3 service teasers + testimonials) | Correct base type | ALIGNED (structure) |
| `/bodas-reales` | Service Page (overview → process → testimonials → FAQ → CTA) — matches taxonomy's Service Page structure almost exactly | Missing the **Local Page** layer (no address, no service-area statement, no Málaga keyword) that real competitors add on top of the same Service Page skeleton | **MEDIUM** |
| `/corporativo-business` | Service Page, best-executed of the three (on-page lead form) | Same local-layer gap | **MEDIUM** |
| `/reuniones-familiares` | Service Page | Same local-layer gap, plus missing guest-capacity/minimum info | **MEDIUM** |
**Primary finding: this is not a page-type mismatch (the skeleton is right) — it's a missing Local Page layer + missing pricing transparency**, both of which the real SERP consensus rewards. Treat as MEDIUM severity: structurally sound, functionally incomplete for a local, budget-sensitive buyer journey.
---
## User Stories (derived from SERP signals)
1. **As a bride/groom planning a wedding in Málaga (Awareness→Consideration)**, I want to instantly confirm this caterer serves my area, because I'm scanning several providers quickly, but I'm blocked by **zero mentions of "Málaga" or any service area** anywhere on `/bodas-reales` — the copy could describe a caterer in any city.
*(Source: competitor SERP pages mention Málaga/Costa del Sol 15+ times each; MNQ page: 0 mentions.)*
2. **As a budget-conscious couple (Consideration)**, I want at least a ballpark price per person before messaging a stranger on WhatsApp, because the SERP itself surfaces a dedicated "¿Cuánto cuesta un catering de boda en Málaga?" guide and directory pages publishing €69–153/person ranges, but I'm blocked by MNQ's explicit refusal to give any number ("no trabajamos con paquetes cerrados," "presupuesto a medida" repeated verbatim on 3 pages).
*(Source: ranking price-guide article + directory price displays in top-10 SERP.)*
3. **As a corporate event planner comparing several caterers (Decision)**, I want to see named case studies or client logos specific to corporate events, because comparison fatigue is high in this niche (7+ visually similar "premium" competitors rank), but `/corporativo-business` shows **zero** case studies or logos on the page itself — the only testimonial in the entire site (Javier Ruiz, TechCorp) lives on the homepage and isn't repeated here.
*(Source: 7 individual competitor Service Pages co-ranking; page content inspection.)*
4. **As a couple wanting reassurance before contacting (Consideration→Decision)**, I want to confirm they can actually travel to my specific venue, because `/bodas-reales` *does* build real trust with two named-couple testimonials and real venue names (Finca La Montaña, Castillo de Viñuelas) — a genuine strength — but coverage is only ever described as "cobertura a confirmar," leaving the geography question open even after reading the FAQ.
*(Source: page FAQ "¿Cuándo se confirma la viabilidad del evento?" answers process, never geography.)*
5. **As a family organizing a baptism or anniversary (Awareness)**, I want to know roughly how many guests they can handle and whether my gathering is "big enough" or "too big," because `/reuniones-familiares` clearly lists formats (Brunch, comida sentada, cóctel, cena privada) — good clarity — but never states a minimum or maximum guest count or minimum spend, so I don't know if I qualify before reaching out.
*(Source: page content inspection — no numeric guest range anywhere on the page.)*
Stories span Awareness (1, 5), Consideration (2, 3), and Decision (4) — 3 journey stages covered.
---
## Persona Scoring
| Persona | Target page | Relevance | Clarity | Trust | Action | Total | Rating |
|---|---|---|---|---|---|---|---|
| Novia/Novio premium en Málaga | `/bodas-reales` | 20/25 | 14/25 | 18/25 | 16/25 | **68/100** | Good |
| Responsable corporativo comparando proveedores | `/corporativo-business` | 21/25 | 17/25 | 12/25 | 22/25 | **72/100** | Good |
| Familia organizando bautizo/aniversario | `/reuniones-familiares` | 19/25 | 13/25 | 15/25 | 17/25 | **64/100** | Good (borderline) |
| Comprador sensible al precio (cross-site) | all 4 | 10/25 | 6/25 | 10/25 | 14/25 | **40/100** | Critical Mismatch |
| Buscador en Costa del Sol fuera de Málaga capital | all 4 | 12/25 | 8/25 | 12/25 | 15/25 | **47/100** | Needs Work |
| Wedding/event planner profesional evaluando proveedor | `/corporativo-business` + home | 17/25 | 12/25 | 14/25 | 13/25 | **56/100** | Needs Work |
### Weakest Persona: Comprador sensible al precio (40/100)
**Top issue:** No page in scope gives any numeric price anchor — not a range, not a "desde X€/persona," nothing. Three FAQ answers across three different pages use near-identical wording to deflect the cost question entirely.
**Recommended fix:** Add a transparent-but-vague anchor that preserves the bespoke positioning without scaring off budget-checkers — e.g., a line under the FAQ "¿El presupuesto incluye solo comida?" stating an indicative starting range (mirrors the €69–153/pp band competitors already publish), or a "solicite rango orientativo" micro-CTA that's lower-friction than a full WhatsApp message.
### Systemic Issue: Clarity is the weakest dimension across every persona
Average Clarity score ≈ 11.7/25 vs. Relevance ≈ 16.5/25. Root causes, both fixable at the content level:
- No numeric anchors anywhere (price, guest capacity, service radius) — every "how much / how many / how far" question requires initiating contact to answer.
- The three FAQ blocks (bodas, corporativo, familiares) reuse nearly identical template language ("se calcula según... invitados, personal, menaje, timing, desplazamiento") instead of giving page-specific concrete numbers or examples.
### Priority Actions
1. Add an indicative price range (or minimum spend) near the budget FAQ on all three service pages — targets the weakest persona (Comprador sensible al precio, 40/100).
2. Add explicit service-area copy ("Servicio en Málaga capital y Costa del Sol — Marbella, Ronda, Estepona...") to the hero or a dedicated info block on all 3 service pages and the homepage — targets both the location-uncertainty persona (47/100) and the SERP's dominant location-saturation signal.
3. Add a guest-count range or minimum to `/reuniones-familiares` and `/bodas-reales` — closes the second-most-cited clarity gap.
4. Add at least one named case study/logo to `/corporativo-business` — targets the professional-planner and corporate personas (56/100, 72/100) and directly addresses comparison fatigue from 7+ visually similar competitors.
---
## Gap Analysis (7 dimensions, 100 pts)
| Dimension | Score | Evidence |
|---|---|---|
| Page Type (0–15) | 12/15 | Correct Service Page skeleton (process, FAQ, testimonials, CTA) matching SERP consensus; missing the Local Page layer competitors add. |
| Content Depth (0–15) | 7/15 | 358–488 words/page; no pricing, no capacity, no service-area detail — thin vs. the depth a "guía de presupuesto" competitor article demonstrates ranks well for these terms. |
| UX Signals (0–15) | 10/15 | Clear headings, working FAQ accordions, `/corporativo-business` has an actual lead-capture form (best element on the site); but WhatsApp-only CTA on the other two pages, and no low-commitment alternative (menu download, price calculator). |
| Schema (0–15) | 8/15 | `CateringService` + `FAQPage` JSON-LD present on all 3 service pages (good); but `url` field hard-codes the unregistered domain, no address/areaServed/geo despite being a local business, no Review/AggregateRating schema despite having testimonials. |
| Media (0–15) | 12/15 | 6–13 images per page, descriptive Spanish alt text, dedicated gallery on homepage; missing chef/team photos and photos tied to the named testimonials/venues. |
| Authority (0–15) | 5/15 | Only 2 named testimonials total (on `/bodas-reales`) + 1 generic corporate quote on the homepage not reused elsewhere; zero press mentions, awards, certifications, or "X eventos realizados" counters (competitor La Monarca advertises "+300 eventos/año"). |
| Freshness (0–10) | 5/10 | Footer says "© 2025" and testimonials are dated (Junio/Septiembre 2023) but look stale by comparison; no visible "recently updated" or current-year case study signal. |
| **Total** | **59/100** | |
**SXO Gap Score: 59/100** (this is separate from and not comparable to any SEO Health Score).
---
## What already works well
- **Correct page-type skeleton**: all 3 service pages already follow the Service Page structure the real SERP rewards (process/methodology sections, FAQ, testimonial, CTA) — no rebuild needed, just content completion.
- **Real, specific testimonials**: named couples + real venue names (Finca La Montaña, Castillo de Viñuelas) on `/bodas-reales` are stronger trust signals than at least one top-ranking competitor (La Borraja has none at all).
- **`/corporativo-business` lead form**: the only page with a proper on-page form (Empresa, Correo Corporativo, Tipo de Evento, Nº Asistentes) instead of relying solely on WhatsApp — meaningfully lower friction and the strongest-performing page in persona scoring (72/100).
- **FAQPage + CateringService structured data present and valid** on all 3 service pages — most competitors inspected don't appear to have this.
- **Descriptive, consistent image alt text** in Spanish across all pages (13 images on homepage alone, all with meaningful alt attributes).
- **Consistent CTA presence**: every page has at least one clear, above-the-fold-reachable WhatsApp CTA.
---
## Limitations
- Only the 4 requested pages (`/`, `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares`) were fetched and parsed; `/contacto` and `/nosotros` were referenced only via nav links, not audited in depth (contacto.html data available from a prior pass in this session shows `addressLocality: Málaga` in schema there, suggesting the address exists but isn't surfaced on the pages that actually need it for buyer decision-making).
- SERP analysis is based on 3 representative WebSearch queries (~9 unique top-10 URLs) plus one deep competitor page inspection (laborraja.com), not a full manual SERP crawl with PAA/AI Overview/ads capture — Google's live PAA boxes and AI Overview content for these exact queries could not be directly inspected through the available tools.
- No rank-tracking or Search Console data was available to confirm MNQ's current ranking position or click-through behavior for these keywords.
- Mobile-rendered/JS-rendered DOM was not force-rendered (`--mode always`); pages returned `is_spa: false` and raw HTML matched expected content, so this is a low-risk gap, but above-the-fold visual verification (Lighthouse/screenshot) was not performed in this pass.
- The canonical/OG/schema domain-mismatch issue is reported here because it was observed live, but a full technical-SEO remediation check is out of scope for this SXO audit — recommend a dedicated technical pass after the pending domain-fix deploy.
---
## Recommended follow-ups
- `/seo schema` — add `areaServed`/`address`/`geo` to the `CateringService` JSON-LD on all 3 service pages, add `Review`/`AggregateRating` for the testimonials, and fix the `url` field once the domain fix is deployed.
- `/seo local` — formalize service-area messaging (Málaga capital + Costa del Sol towns) across the 3 service pages and homepage, not just `/contacto`.
- `/seo content` — add pricing-range and guest-capacity content blocks; expand `/corporativo-business` with a named case study.
- Generate a PDF report? Use `/seo google report`.
@@ -0,0 +1,126 @@
# Technical SEO Audit — MNQ Catering y Evento
**Audited live site:** https://www.mnqeventos.es/ (confirmed canonical/production domain — see Finding #1)
**Date:** 2026-09-15
**Method:** DNS (dig, WHOIS), curl (headers/status/redirects), HTML source inspection. No JS rendering / Lighthouse run performed (out of scope).
## Summary
The domain originally given for this audit, `mnqcatering.com` / `www.mnqcatering.com`, **does not exist** — confirmed via WHOIS ("No match for domain MNQCATERING.COM") and authoritative DNS (NXDOMAIN). This was corrected mid-audit by the coordinator: the real, live, production domain is **https://www.mnqeventos.es/** (bare apex `mnqeventos.es` has no A record — only the `www` host resolves and serves).
The codebase was fixed **in this session** (commit `a6692b7`, working tree at audit time) to set `CANONICAL_HOST = 'www.mnqeventos.es'` in `src/middleware.ts` and `site: 'https://www.mnqeventos.es'` in `astro.config.mjs`. **This fix is not yet deployed**: every live page fetched during this audit still emits canonical tags, the sitemap, robots.txt, JSON-LD `url`, and `og:url`/`og:image` pointing at `www.mnqcatering.com` — a domain that cannot resolve. This is the single highest-priority issue in the audit.
## Findings
### 1. [Critical] Declared canonical domain (`www.mnqcatering.com`) does not exist in DNS/WHOIS
**Evidence:**
```
$ whois mnqcatering.com
No match for domain "MNQCATERING.COM".
$ dig www.mnqcatering.com A +noall +comments
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN
```
**Recommendation:** Confirmed non-bug in the audit sense (per coordinator) — the domain was never registered. Action item is organizational, not technical: either register `mnqcatering.com` and point it at the same infrastructure with a 301 to `www.mnqeventos.es`, or fully scrub any remaining reference to it (marketing collateral, external backlinks, business cards, Google Business Profile, etc.) since it's a dead domain that currently returns nothing.
### 2. [Critical] Production is still serving the pre-fix build — every canonical/sitemap/structured-data reference points to the non-existent domain
**Evidence** (all fetched live from `https://www.mnqeventos.es/` on 2026-09-15):
- Canonical tags on all 9 pages, e.g.:
`<link rel="canonical" href="https://www.mnqcatering.com/">`
`<link rel="canonical" href="https://www.mnqcatering.com/aviso-legal">`
- `robots.txt`:
```
User-agent: *
Allow: /
Sitemap: https://www.mnqcatering.com/sitemap-index.xml
```
- `sitemap-index.xml` → `<loc>https://www.mnqcatering.com/sitemap-0.xml</loc>` → `sitemap-0.xml` lists 7 URLs, all on `https://www.mnqcatering.com/...`
- JSON-LD (`CateringService`): `"url":"https://www.mnqcatering.com"`
- OpenGraph: `og:url` and `og:image` both on `https://www.mnqcatering.com/...`
- The application-layer redirect middleware (which should force any non-canonical `Host` to the canonical one) is **not firing** in production: `https://www.mnqeventos.es/` returns `200` directly instead of a `301` — consistent with the live deployment predating the `a6692b7` fix, since that fix only changed which host is canonical, not whether the middleware runs.
Repo state confirms the fix exists in source but hasn't shipped:
```
src/middleware.ts:3:const CANONICAL_HOST = 'www.mnqeventos.es';
astro.config.mjs:6: site: 'https://www.mnqeventos.es',
```
```
$ git log --oneline -3
a6692b7 fix(seo): correct canonical domain to www.mnqeventos.es
0e242a6 docs(seo): add search-engine publication and local SEO checklist
5741e68 fix(seo): redirect non-canonical domains to www.mnqcatering.com
```
**Impact:** Every canonical signal Google/Bing can currently read is unreachable. Search engines will either ignore the canonical hint entirely (falling back to the URL actually crawled, `www.mnqeventos.es`) or, worse, treat it as a soft error during indexing. The sitemap is effectively useless since its URLs 404-by-DNS. This blocks clean re-indexing under the correct domain.
**Recommendation:** Deploy the current `master`/working-tree build immediately. Post-deploy, re-verify: canonical tags, sitemap URLs, robots.txt `Sitemap:` line, JSON-LD `url`, and `og:url`/`og:image` should all read `https://www.mnqeventos.es/...`. Then submit the updated sitemap in Search Console/Bing Webmaster Tools and request re-indexing of all 7 indexable URLs.
### 3. [High] No security headers on any response
**Evidence:**
```
$ curl -s -D - -o /dev/null --http1.1 https://www.mnqeventos.es/nosotros
HTTP/1.1 200 OK
Alt-Svc: h3=":443"; ma=2592000
Content-Type: text/html
Date: Tue, 15 Sep 2026 07:14:49 GMT
Transfer-Encoding: chunked
```
No `Strict-Transport-Security`, `X-Content-Type-Options`, `X-Frame-Options`, `Content-Security-Policy`, `Referrer-Policy`, or `Permissions-Policy` header on any of the 9 pages or `robots.txt`/`sitemap-index.xml`. No `Content-Encoding` returned even when requesting `Accept-Encoding: gzip, br, deflate` — responses are served uncompressed (or the header is stripped at the edge; either way it's not observable from outside).
**Recommendation:** Add at minimum `Strict-Transport-Security: max-age=31536000; includeSubDomains`, `X-Content-Type-Options: nosniff`, `X-Frame-Options: DENY` (or CSP `frame-ancestors`), and a baseline CSP. These aren't primarily ranking factors but HSTS absence is a real security/trust gap, and Google's security-signals tooling (and some AI crawlers) do surface missing headers. Also verify/enable br or gzip compression at the CDN/edge — it affects transfer time and thus LCP on slower connections.
### 4. [Medium] Trailing-slash URL duplication not canonicalized at the redirect layer
**Evidence:**
```
$ curl -s -o /dev/null -w "%{http_code}\n" https://www.mnqeventos.es/aviso-legal
200
$ curl -s -o /dev/null -w "%{http_code}\n" https://www.mnqeventos.es/aviso-legal/
200
```
Both variants return `200` directly (no redirect either way), yet the sitemap lists the trailing-slash form (`https://www.mnqcatering.com/aviso-legal/`) while the page's own canonical tag declares the no-slash form (`https://www.mnqcatering.com/aviso-legal`) — the two signals disagree with each other, independent of the domain issue in Finding #2.
**Recommendation:** Pick one form (recommend no trailing slash, matching the existing canonical tags) and 301-redirect the other at the middleware/edge level; make sure the sitemap generator emits the same form as the canonical tags.
### 5. [Info/Pass] Meta robots correct across all 9 pages
**Evidence:** `index,follow` on `/`, `/nosotros`, `/bodas-reales`, `/corporativo-business`, `/reuniones-familiares`, `/contacto`; `noindex,follow` on `/cookies`, `/privacidad`, `/aviso-legal`. The sitemap correctly excludes the three noindexed legal pages (7 URLs listed, matching the 6 index,follow pages + none of the 3 noindex pages — actually 7 = 6 main + apex counted once; legal pages correctly absent).
No issue — this is exactly the intended pattern.
### 6. [Info/Pass] No 404s or broken internal links found
**Evidence:** All 9 requested paths return `200`. All `href="/..."` internal links extracted from all 9 pages resolve to one of those same 9 known paths (no dead links, no orphaned nav targets). A deliberately invalid path returns a real `404`:
```
$ curl -s -o /dev/null -w "%{http_code}\n" https://www.mnqeventos.es/this-page-does-not-exist-xyz
404
```
### 7. [Info/Pass] TLS certificate valid, but scoped only to the real domain
**Evidence:**
```
subject=CN=www.mnqeventos.es
issuer=C=US, O=Let's Encrypt, CN=YR2
notBefore=Aug 15 10:48:30 2026 GMT
notAfter=Nov 13 10:48:29 2026 GMT
X509v3 Subject Alternative Name: DNS:www.mnqeventos.es
```
Valid, auto-renewing (Let's Encrypt ~90-day cert, well within window). SAN correctly does **not** include `mnqcatering.com` (expected, since that domain doesn't exist — not a cert misconfiguration).
No action needed beyond normal renewal monitoring.
### 8. [Info/Pass] Core Web Vitals signals look solid from source inspection
**Evidence:** Hero/LCP image has `loading="eager" fetchpriority="high" decoding="async"` with explicit `width`/`height`; all other images are `loading="lazy"` with explicit dimensions (protects CLS); web fonts use the `preload` + `onload` swap-to-stylesheet pattern (avoids render-blocking); the one third-party script (analytics, `umami.qreastech.com`) is `async defer`; zero inline blocking `<script>` tags; homepage HTML is a lean 25KB. No obvious CWV red flags from static inspection — a real Lighthouse/CrUX run is still recommended to confirm actual LCP/INP/CLS values, but nothing in source suggests a problem.
### 9. [Not applicable / blocked] IndexNow
`indexnow.txt`/key file not found (`404`). Given Finding #2, implementing IndexNow now (while canonical URLs point at a dead domain) would be counterproductive — pings would announce URLs on the wrong host. **Recommendation:** implement IndexNow only after Finding #2 is deployed and re-verified, submitting `https://www.mnqeventos.es/...` URLs.
## Redirect Behavior Matrix
| Request | Result |
|---|---|
| `http://mnqeventos.es/` (bare, http) | DNS: `NOERROR`, 0 answers — apex has no A record, connection fails |
| `https://mnqeventos.es/` (bare, https) | Same — apex does not serve |
| `http://www.mnqeventos.es/` | `301` → `https://www.mnqeventos.es/` (HTTP→HTTPS enforced, good) |
| `https://www.mnqeventos.es/` | `200` direct (no further redirect — this is the live site) |
| `http(s)://mnqcatering.com/`, `http(s)://www.mnqcatering.com/` | Cannot resolve — domain not registered (Finding #1); not a redirect issue |
The canonical-host middleware described as "just shipped" only redirects **away from** `www.mnqcatering.com`/`mnqeventos.es` (bare) **to** the `CANONICAL_HOST` constant — it was never expected to make the bare `mnqeventos.es` apex resolve (that's a DNS-level gap, not something app middleware can fix; the apex needs its own A/AAAA record or a redirect at the DNS/registrar level if traffic to the bare domain is expected).
## Score: 58 / 100
**What already works well:** page-level fundamentals are solid — correct `index,follow` vs `noindex,follow` split, no broken internal links or unexpected 404s, valid and current TLS certificate, and CWV-relevant markup (image dimensions, lazy-loading, non-blocking fonts/scripts) all look properly implemented in the Astro source. The domain-identity fix has already been correctly authored in code.
**What's dragging the score down:** the fix isn't deployed, so right now *every single indexing signal the site emits* (canonical, sitemap, robots.txt sitemap pointer, JSON-LD, OpenGraph) points at a domain that returns NXDOMAIN — which for a live production site is as severe as having no canonical at all — compounded by a total absence of security headers.
@@ -0,0 +1,49 @@
# Visual / Above-the-Fold Audit — mnqcatering.com
## Summary
The audit target, `https://www.mnqcatering.com`, **does not resolve**. No visual, above-the-fold, mobile-rendering, or CTA/overlap analysis could be performed because the site is unreachable — this is not a tooling limitation, it is a state of the live domain itself. No screenshots were captured and none of the requested visual assessments (CTA clarity, tap-target sizing, layout shift, WhatsApp/cookie-banner overlap) could be verified. Do not treat the absence of findings below as "no issues" — it means "not observable."
## Verification performed
Playwright/Chromium was successfully installed and configured in this session (in an isolated venv), so tooling was not the blocker. Navigation to `https://www.mnqcatering.com` failed with `net::ERR_NAME_NOT_RESOLVED`. This was cross-checked independently of the browser:
- `nslookup www.mnqcatering.com` (local resolver) → `NXDOMAIN`
- `dig mnqcatering.com @8.8.8.8` and `@1.1.1.1` (public resolvers, bypassing any local/sandbox DNS) → `NXDOMAIN`
- `whois mnqcatering.com` → **"No match for domain 'MNQCATERING.COM'"** (Verisign registry has no registration record for this domain at all — this is not "DNS not yet propagated," it means the `.com` is currently unregistered/available)
This confirms the failure is a real domain/DNS state, not a sandbox network artifact.
## Codebase cross-check
The repository is configured with `www.mnqcatering.com` as the intended canonical host:
- `astro.config.mjs`: `site: 'https://www.mnqcatering.com'`
- `src/middleware.ts`: `CANONICAL_HOST = 'www.mnqcatering.com'`, with a comment noting the site was "undesirably mirrored at mnqeventos.es (same content, no redirect at the DNS/hosting level)" and enforcing app-layer redirects to the `.com` host for any other incoming host (including `mnqeventos.es`, `www.mnqeventos.es`, and the bare `mnqcatering.com` apex)
This means the middleware's entire redirect strategy currently funnels traffic toward a domain that is not registered — if that middleware is live anywhere, it is actively redirecting visitors to a dead destination.
### `mnqeventos.es` (the alternate host referenced in the code)
- `dig mnqeventos.es @8.8.8.8` → resolves to `169.58.117.246` (domain is registered and has DNS records)
- An HTTP reachability check from this sandbox to `mnqeventos.es` failed at the network layer (could not resolve/connect from this specific execution environment, despite public DNS resolving it), so I could **not** confirm `mnqeventos.es` is actually serving the live site, nor capture screenshots of it. This is a sandbox network-egress limitation for that particular check, distinct from the `mnqcatering.com` finding, which is a confirmed WHOIS/registry-level absence.
## Findings
| # | Severity | Evidence | Recommendation |
|---|----------|----------|-----------------|
| 1 | **Critical** | `whois mnqcatering.com` → "No match for domain 'MNQCATERING.COM'"; `dig` against 8.8.8.8 and 1.1.1.1 both return NXDOMAIN | The canonical domain the entire site (config, middleware, sitemap, canonical tags) is built around is not currently registered. Register/renew `mnqcatering.com` immediately, or confirm with the registrar whether this is an expiry lapse. Until resolved, the site has zero organic visibility on its intended domain — this supersedes every other SEO/visual concern audited elsewhere in this project. |
| 2 | **High** (unverified, code-derived) | `src/middleware.ts` redirects all non-canonical hosts (including `mnqeventos.es`) to `www.mnqcatering.com` with a 301 | If this middleware is deployed and `mnqeventos.es` is the domain actually receiving traffic, that traffic is being 301-redirected to an unregistered domain — a hard dead end for users and a guaranteed crawl error for search engines. Verify current production deployment target before doing anything else. |
| 3 | Info | N/A — no page could be loaded | All requested visual checks (above-fold CTA visibility, mobile tap-target sizing ≥48x48px, layout-shift risk, WhatsApp floating button vs. cookie-banner overlap) are **unverified**, not "passed." Re-run this audit once the domain resolves. |
## Score
**0 / 100** — reason: primary audit target domain does not resolve (unregistered per WHOIS). No page content was reachable, so no visual/UX quality can be assessed or scored on its merits; a non-resolving domain is a full blocker for any user or crawler reaching the site.
## What already works well
Cannot be assessed — no page rendered. The one positive observation available from static inspection is that the **codebase's intent** is coherent: a single canonical host is configured consistently across `astro.config.mjs`, `MainLayout.astro`, and `middleware.ts`, and there's already institutional awareness of the `mnqeventos.es` duplicate-content risk (captured in code comments and a prior "redirect non-canonical domains" commit). The problem is not the code's design — it's that the domain the code assumes is live is not currently registered.
## Next step
This is a domain-registration/DNS-infrastructure issue, outside the scope of code or content changes. Resolve domain registration first, then re-run this visual audit (desktop 1440px / mobile 390px screenshots of homepage and `/bodas-reales`, CTA/tap-target/overlap checks) against a confirmed-live host.
@@ -0,0 +1,75 @@
# Publicación en buscadores — checklist
Estado: preparado el 2026-09-15. Todo lo de código ya está commiteado y en GitHub
(`origin`, `master`). Los pasos de abajo requieren acceso a cuentas externas
(Google, Bing, Gitea) que Claude no tiene — hay que ejecutarlos manualmente,
salvo donde se indica que Claude puede terminar el trabajo con un dato tuyo.
## 1. Google Search Console
1. Entrar a https://search.google.com/search-console y agregar la propiedad
`https://www.mnqcatering.com` (tipo "Prefijo de URL", no "Dominio", porque
el dominio de verificación por DNS es más lento de configurar).
2. Elegir método de verificación:
- **Meta tag HTML (recomendado, más rápido):** Google te da una línea
`<meta name="google-site-verification" content="XXXX" />`. Pasame el
valor de `content` y lo agrego a `src/layouts/MainLayout.astro` en el
`<head>`, hago commit y push, y confirmás la verificación en la consola.
- **DNS TXT:** si preferís este método, agregás el registro TXT que te da
Google en el proveedor de DNS del dominio. No requiere cambios de código.
3. Una vez verificado, enviar el sitemap: `Sitemaps` → agregar
`sitemap-index.xml` (se genera solo en cada build, en
`https://www.mnqcatering.com/sitemap-index.xml`).
4. Revisar `Cobertura`/`Páginas` a los pocos días para confirmar indexación de
las 6 páginas comerciales (`/`, `/nosotros`, `/bodas-reales`,
`/corporativo-business`, `/reuniones-familiares`, `/contacto`).
## 2. Google Business Profile (clave para SEO local)
1. Entrar a https://business.google.com y crear/reclamar el perfil de
"MNQ Catering y Evento".
2. Dirección exacta a usar (debe coincidir con la del sitio, ya cargada en
el schema y en footer/contacto):
`Calle Camino Vivero, 6, 29014, Málaga, España`
3. Categoría principal: "Servicio de catering" (o la más específica que
ofrezca Google en español).
4. Teléfono: `+34 678 17 15 13` (mismo que en el sitio).
5. Web: `https://www.mnqcatering.com`
6. Verificar el perfil (Google suele ofrecer verificación por video, código
postal o llamada telefónica para este tipo de negocio).
7. Una vez verificado, anotame las **coordenadas exactas** que Google asigna
al fijar el pin — con eso completo el campo `geo` (`GeoCoordinates`) que
quedó pendiente en el JSON-LD.
8. Subir fotos reales (ya hay material en `docs/imagenes/`), y activar
mensajería/WhatsApp si Google lo permite para esta categoría.
## 3. Bing Webmaster Tools
1. Entrar a https://www.bing.com/webmasters
2. Usar la opción "Importar desde Google Search Console" (requiere haber
completado el paso 1) — importa verificación y sitemap en un solo paso,
sin volver a tocar código.
## 4. Repositorio Gitea (`git.qreastech.com`)
Pendiente por falta de credenciales: no hay `credential.helper` configurado
para ese host en esta máquina. Para destrabarlo:
- Generar un token de acceso personal en Gitea (`Settings` → `Applications` →
`Generate New Token`, con permiso de escritura sobre el repo).
- Pasarme el token (o el usuario+token) y lo guardo en el credential store de
git para este host únicamente.
- El remoto ya está corregido: `https://git.qreastech.com/qreastech/MNQ-Catering-y-Evento.git`
(el repo se había movido de namespace `manuyasm87` a `qreastech`).
- Los commits ya están listos localmente y en GitHub; solo falta este push.
## 5. Datos pendientes para profundizar AEO (cuando los tengas)
- Coordenadas geo exactas (paso 2.7 arriba)
- Rango de precios o "a partir de" por tipo de evento
- Rango de capacidad (mínimo/máximo de invitados)
- Perfiles sociales reales (Instagram, Facebook) para `sameAs` en el schema
- Tiempo de antelación mínimo para reservar
Con cualquiera de estos datos puedo ampliar las FAQ y el schema sin necesidad
de otra ronda de preguntas — los agrego apenas los tenga.
Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

+1 -1
View File
@@ -4,7 +4,7 @@ HOST = "0.0.0.0"
PORT = "4321"
[phases.setup]
nixPkgs = ["nodejs_20"]
nixPkgs = ["nodejs_22"]
[start]
cmd = "node ./dist/server/entry.mjs"
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 535 KiB

+1678 -3043
View File
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -12,12 +12,12 @@
},
"type": "module",
"dependencies": {
"@astrojs/node": "^9.5.5",
"@astrojs/sitemap": "^3.7.3",
"astro": "^5.18.1"
"@astrojs/node": "^11.1.5",
"@astrojs/sitemap": "^3.7.4",
"astro": "^7.3.2"
},
"devDependencies": {
"@astrojs/check": "^0.9.9",
"typescript": "^5.9.3"
"@astrojs/check": "^0.9.10",
"typescript": "^6.0.3"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

+3 -1
View File
@@ -1,7 +1,9 @@
MNQ Catering y Evento
- Canonical domain: https://mnq.elkazurrotaberna.es
- Canonical domain: https://www.mnqeventos.es
- Business type: Premium catering service
- Address: Calle Borde Alegre, 1, 29014, Málaga, España
- Area served: Málaga, Marbella, Benalmádena, Fuengirola, Torremolinos, Provincia de Málaga, Costa del Sol
- Services: Bodas, eventos corporativos, reuniones familiares
- Primary contact channels: WhatsApp (+34 678 17 15 13), phone (+34 678 17 15 13)
- Key pages: /, /nosotros, /bodas-reales, /corporativo-business, /reuniones-familiares, /contacto

Some files were not shown because too many files have changed in this diff Show More