cc-codeconductor 0.2.6 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -1
- package/dist/index.js +782 -24
- package/package.json +2 -1
- package/presets/opencode/README.md +7 -7
- package/presets/opencode/agents/architect.md +0 -1
- package/presets/opencode/agents/docs.md +0 -1
- package/presets/opencode/agents/implementer.md +0 -1
- package/presets/opencode/agents/orchestrator.md +0 -1
- package/presets/opencode/agents/repo-explorer.md +0 -1
- package/presets/opencode/agents/reviewer.md +0 -1
- package/presets/opencode/agents/task-coach.md +0 -1
- package/presets/opencode/agents/tester.md +0 -1
- package/presets/opencode/opencode.jsonc +2 -11
- package/presets/opencode/prompts/v0.2.0/docs.md +1 -1
- package/presets/opencode/prompts/v0.2.0/repo-explorer.md +1 -1
- package/presets/opencode/prompts/v0.2.0/reviewer.md +1 -1
- package/presets/opencode/prompts/v0.2.0/task-coach.md +1 -1
- package/presets/seo-hotel/commands/cc-seo-audit.md +87 -0
- package/presets/seo-hotel/skills/astro-seo/SKILL.md +245 -0
- package/presets/seo-hotel/skills/geo-readiness/SKILL.md +221 -0
- package/presets/seo-hotel/skills/off-page/SKILL.md +201 -0
- package/presets/seo-hotel/skills/schema-validator/SKILL.md +325 -0
- package/presets/seo-hotel/skills/seo-audit/SKILL.md +191 -0
- package/src/presets/manifests/agy.yml +9 -0
- package/src/presets/manifests/opencode.yml +2 -1
- package/src/presets/models/agy.yml +59 -0
- package/src/presets/models/claude.yml +3 -3
- package/src/presets/models/codex.yml +3 -3
- package/src/presets/models/cursor.yml +3 -3
- package/src/presets/models/gemini.yml +3 -3
- package/src/presets/models/opencode.yml +11 -46
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cc-codeconductor",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
4
4
|
"description": "A multi-agent orchestration framework for AI-assisted software engineering workflows.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"type": "module",
|
|
31
31
|
"bin": {
|
|
32
|
+
"cc-codeconductor": "./dist/index.js",
|
|
32
33
|
"codeconductor": "./dist/index.js"
|
|
33
34
|
},
|
|
34
35
|
"scripts": {
|
|
@@ -24,7 +24,7 @@ providers)** models.
|
|
|
24
24
|
| `deepseek-v4-pro` | DeepSeek | Reasoning complejo, arquitectura | Architect, orchestrator |
|
|
25
25
|
| `mimo-v2.5-pro` | MiniMax | Razonamiento matemático, código | Implementer |
|
|
26
26
|
| `minimax-m2.7` | MiniMax | Tareas equilibradas | Tester, orchestrator |
|
|
27
|
-
| `
|
|
27
|
+
| `qwen3.6-plus` | Qwen | Rápido, eficiente | Reviewer, Task Coach, Docs |
|
|
28
28
|
| `kimi-k2-6` | Kimi (Moonshot) | Conversación natural | Task Coach, Docs |
|
|
29
29
|
|
|
30
30
|
---
|
|
@@ -37,10 +37,10 @@ providers)** models.
|
|
|
37
37
|
| **Architect** | `claude-opus-4-7` | `deepseek-v4-pro` | `mimo-v2.5-pro` |
|
|
38
38
|
| **Implementer** | `claude-sonnet-4-6` | `mimo-v2.5-pro` | `minimax-m2.7` |
|
|
39
39
|
| **Tester** | `claude-sonnet-4-6` | `minimax-m2.7` | `deepseek-v4-pro` |
|
|
40
|
-
| **Reviewer** | `claude-sonnet-4-6` | `
|
|
41
|
-
| **Task Coach** | `claude-haiku-4-5-20251001` | `
|
|
42
|
-
| **Docs** | `claude-haiku-4-5-20251001` | `
|
|
43
|
-
| **Repo Explorer** | `claude-haiku-4-5-20251001` | `
|
|
40
|
+
| **Reviewer** | `claude-sonnet-4-6` | `qwen3.6-plus` | `minimax-m2.7` |
|
|
41
|
+
| **Task Coach** | `claude-haiku-4-5-20251001` | `qwen3.6-plus` | `kimi-k2.6` |
|
|
42
|
+
| **Docs** | `claude-haiku-4-5-20251001` | `qwen3.6-plus` | `kimi-k2.6` |
|
|
43
|
+
| **Repo Explorer** | `claude-haiku-4-5-20251001` | `qwen3.6-plus` | `kimi-k2.6` |
|
|
44
44
|
|
|
45
45
|
---
|
|
46
46
|
|
|
@@ -84,7 +84,7 @@ The following paths are denied by default:
|
|
|
84
84
|
|
|
85
85
|
### Simple Tasks (Q&A, intake, documentation)
|
|
86
86
|
|
|
87
|
-
**Recommended:** `
|
|
87
|
+
**Recommended:** `qwen3.6-plus` (OpenCode Go) or `claude-haiku-4-5-20251001`
|
|
88
88
|
(Claude)
|
|
89
89
|
|
|
90
90
|
- Task Coach intake
|
|
@@ -164,7 +164,7 @@ export KIMI_API_KEY="your-key"
|
|
|
164
164
|
| Scenario | Recommended |
|
|
165
165
|
| ------------------------------- | -------------------------------------------------- |
|
|
166
166
|
| Complex reasoning, architecture | OpenCode Go (`deepseek-v4-pro`) or Claude (`opus`) |
|
|
167
|
-
| Fast iteration, simple tasks | OpenCode Go (`
|
|
167
|
+
| Fast iteration, simple tasks | OpenCode Go (`qwen3.6-plus`) or Claude (`haiku`) |
|
|
168
168
|
| Code implementation | OpenCode Go (`mimo-v2.5-pro`) or Claude (`sonnet`) |
|
|
169
169
|
| Budget constraints | OpenCode Go (generally lower cost) |
|
|
170
170
|
| Availability issues | Switch to alternative from the matrix |
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
{
|
|
2
|
-
// CodeConductor policies are declarative until the policy compiler exists.
|
|
3
|
-
// Enforcement depends on OpenCode permission support.
|
|
4
2
|
"$schema": "https://opencode.ai/config.json",
|
|
5
3
|
"model": "opencode-go/qwen3.7-max",
|
|
6
4
|
"permission": {
|
|
@@ -28,9 +26,7 @@
|
|
|
28
26
|
},
|
|
29
27
|
"glob": "allow",
|
|
30
28
|
"grep": "allow",
|
|
31
|
-
"external_directory":
|
|
32
|
-
"*": "deny"
|
|
33
|
-
},
|
|
29
|
+
"external_directory": "deny",
|
|
34
30
|
"bash": {
|
|
35
31
|
"*": "ask",
|
|
36
32
|
"git status*": "allow",
|
|
@@ -79,11 +75,6 @@
|
|
|
79
75
|
},
|
|
80
76
|
"webfetch": "ask",
|
|
81
77
|
"websearch": "ask",
|
|
82
|
-
"
|
|
83
|
-
"*": "ask"
|
|
84
|
-
},
|
|
85
|
-
"skill": {
|
|
86
|
-
"*": "ask"
|
|
87
|
-
}
|
|
78
|
+
"skill": "ask"
|
|
88
79
|
}
|
|
89
80
|
}
|
|
@@ -8,7 +8,7 @@ description:
|
|
|
8
8
|
| Provider | Model | Use Case |
|
|
9
9
|
|----------|-------|----------|
|
|
10
10
|
| Claude | claude-haiku-4-5-20251001 | Fast — documentation |
|
|
11
|
-
| OpenCode Go | opencode-go/
|
|
11
|
+
| OpenCode Go | opencode-go/qwen3.6-plus | Best — efficient docs |
|
|
12
12
|
| OpenCode Go | opencode-go/kimi-k2.6 | Alternative |
|
|
13
13
|
---
|
|
14
14
|
|
|
@@ -9,7 +9,7 @@ description:
|
|
|
9
9
|
| Provider | Model | Use Case |
|
|
10
10
|
|----------|-------|----------|
|
|
11
11
|
| Claude | claude-haiku-4-5-20251001 | Fast — exploration |
|
|
12
|
-
| OpenCode Go | opencode-go/
|
|
12
|
+
| OpenCode Go | opencode-go/qwen3.6-plus | Best — quick mapping |
|
|
13
13
|
| OpenCode Go | opencode-go/kimi-k2.6 | Alternative |
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -9,7 +9,7 @@ description:
|
|
|
9
9
|
| Provider | Model | Use Case |
|
|
10
10
|
|----------|-------|----------|
|
|
11
11
|
| Claude | claude-sonnet-4-6 | Default — code review |
|
|
12
|
-
| OpenCode Go | opencode-go/
|
|
12
|
+
| OpenCode Go | opencode-go/qwen3.6-plus | Best — efficient reviews |
|
|
13
13
|
| OpenCode Go | opencode-go/minimax-m2.7 | Detailed reviews |
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -9,7 +9,7 @@ description:
|
|
|
9
9
|
| Provider | Model | Use Case |
|
|
10
10
|
|----------|-------|----------|
|
|
11
11
|
| Claude | claude-haiku-4-5-20251001 | Fast — intake, Q&A |
|
|
12
|
-
| OpenCode Go | opencode-go/
|
|
12
|
+
| OpenCode Go | opencode-go/qwen3.6-plus | Best — efficient Q&A |
|
|
13
13
|
| OpenCode Go | opencode-go/kimi-k2.6 | Alternative |
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# SEO Audit
|
|
2
|
+
|
|
3
|
+
Run a comprehensive SEO and GEO audit on hotel and hospitality websites.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/cc-seo-audit --url <url> [--format json] [--fail-on error|warning]
|
|
9
|
+
/cc-seo-audit --sitemap <sitemap-url> [--format json] [--fail-on error|warning]
|
|
10
|
+
/cc-seo-audit --astro --path <src-path>
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Parameters
|
|
14
|
+
|
|
15
|
+
| Parameter | Required | Description |
|
|
16
|
+
|-----------|----------|-------------|
|
|
17
|
+
| `--url` | One of `--url` or `--sitemap` | Single URL to audit |
|
|
18
|
+
| `--sitemap` | One of `--url` or `--sitemap` | Remote sitemap XML URL. Only URLs listed here will be audited. |
|
|
19
|
+
| `--format` | No | Output format: `cli` (default) or `json` |
|
|
20
|
+
| `--fail-on` | No | Exit code trigger: `error` (default) or `warning` |
|
|
21
|
+
| `--astro` | No | Run Astro-specific SEO validation on source code |
|
|
22
|
+
| `--path` | With `--astro` | Path to Astro source directory |
|
|
23
|
+
| `--delay` | No | Delay between requests in ms (default: 500) |
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
1. **Classify** the audit type:
|
|
28
|
+
- `--url` → single page audit
|
|
29
|
+
- `--sitemap` → batch audit, sitemap-scoped only
|
|
30
|
+
- `--astro` → source code validation (no network)
|
|
31
|
+
|
|
32
|
+
2. **Route** to the appropriate skill(s):
|
|
33
|
+
- Schema validation → `schema-validator` skill
|
|
34
|
+
- Technical SEO → `seo-audit` skill
|
|
35
|
+
- GEO readiness → `geo-readiness` skill
|
|
36
|
+
- Astro source → `astro-seo` skill
|
|
37
|
+
- Off-page strategy → `off-page` skill
|
|
38
|
+
|
|
39
|
+
3. **Execute** the audit:
|
|
40
|
+
- For `--sitemap`: fetch and parse sitemap XML, extract `<loc>` entries
|
|
41
|
+
- Validate ONLY URLs from the sitemap — never follow external links
|
|
42
|
+
- Apply rate limiting (500ms default between requests)
|
|
43
|
+
- SSRF prevention: reject private IPs and non-HTTP(S) schemes
|
|
44
|
+
|
|
45
|
+
4. **Report** findings:
|
|
46
|
+
- CLI output with pass/fail/warning per check
|
|
47
|
+
- JSON output for CI/CD integration
|
|
48
|
+
- Remediation guidance with exact code snippets
|
|
49
|
+
|
|
50
|
+
5. **Exit codes**:
|
|
51
|
+
- `0` = all checks passed
|
|
52
|
+
- `1` = failures found (or warnings if `--fail-on warning`)
|
|
53
|
+
- `2` = warnings only
|
|
54
|
+
- `3` = network or parsing error
|
|
55
|
+
|
|
56
|
+
## Hard Rules
|
|
57
|
+
|
|
58
|
+
- **Sitemap-scoped only.** When `--sitemap` is provided, only audit URLs from the sitemap.
|
|
59
|
+
- **No external crawling.** Never follow hyperlinks found on pages.
|
|
60
|
+
- **GET only.** No POST, PUT, DELETE requests.
|
|
61
|
+
- **No auth.** Never send cookies, tokens, or API keys.
|
|
62
|
+
- **Timeout.** 10 seconds per request.
|
|
63
|
+
- **SSRF prevention.** Reject private IP ranges and non-HTTP(S) schemes.
|
|
64
|
+
|
|
65
|
+
## Examples
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Audit a single hotel page
|
|
69
|
+
/cc-seo-audit --url https://www.cantovallarta.com
|
|
70
|
+
|
|
71
|
+
# Batch audit from sitemap
|
|
72
|
+
/cc-seo-audit --sitemap https://www.cantovallarta.com/sitemap-0.xml
|
|
73
|
+
|
|
74
|
+
# CI/CD integration
|
|
75
|
+
/cc-seo-audit --sitemap https://preview.example.com/sitemap-0.xml --format json --fail-on error
|
|
76
|
+
|
|
77
|
+
# Astro source code audit
|
|
78
|
+
/cc-seo-audit --astro --path ./src
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Skills Loaded
|
|
82
|
+
|
|
83
|
+
- `schema-validator` — Schema.org structured data validation
|
|
84
|
+
- `seo-audit` — Technical SEO checks
|
|
85
|
+
- `geo-readiness` — AI-search readiness (GEO)
|
|
86
|
+
- `astro-seo` — Astro framework SEO validation
|
|
87
|
+
- `off-page` — Off-page SEO strategy guidance
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: astro-seo
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
name: Astro SEO Validator
|
|
5
|
+
description: >
|
|
6
|
+
SEO validation specific to Astro framework projects. Checks static generation,
|
|
7
|
+
meta tag rendering, Content Collections usage, Island Architecture implications
|
|
8
|
+
for SEO, image optimization, sitemap generation, and Astro-specific best practices.
|
|
9
|
+
|
|
10
|
+
user-invokable: true
|
|
11
|
+
license: MIT
|
|
12
|
+
metadata:
|
|
13
|
+
author: codeconductor
|
|
14
|
+
category: seo
|
|
15
|
+
|
|
16
|
+
compatibility:
|
|
17
|
+
tools: [claude, codex, gemini, opencode]
|
|
18
|
+
stacks:
|
|
19
|
+
languages: [typescript, javascript]
|
|
20
|
+
frameworks: [astro]
|
|
21
|
+
|
|
22
|
+
risk:
|
|
23
|
+
level: low
|
|
24
|
+
can_execute_shell: false
|
|
25
|
+
can_modify_files: true
|
|
26
|
+
requires_network: false
|
|
27
|
+
|
|
28
|
+
inputs: []
|
|
29
|
+
|
|
30
|
+
outputs:
|
|
31
|
+
- name: report
|
|
32
|
+
type: markdown
|
|
33
|
+
description: Astro-specific SEO validation report
|
|
34
|
+
|
|
35
|
+
quality:
|
|
36
|
+
reviewed_by: codeconductor-core
|
|
37
|
+
version: 0.3.0
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
# Astro SEO Validator
|
|
41
|
+
|
|
42
|
+
## Purpose
|
|
43
|
+
|
|
44
|
+
Validate SEO best practices specific to Astro framework projects. Astro's static-first
|
|
45
|
+
approach and Islands Architecture have unique SEO implications that generic tools miss.
|
|
46
|
+
|
|
47
|
+
## Invocation
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
codeconductor seo audit-astro --path ./src
|
|
51
|
+
codeconductor seo audit-astro --path ./src --format json
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Audit Checks
|
|
55
|
+
|
|
56
|
+
### Astro Configuration
|
|
57
|
+
|
|
58
|
+
| Check | Severity | Details |
|
|
59
|
+
|-------|----------|---------|
|
|
60
|
+
| `site` configured in astro.config | FAIL | Required for canonical URLs and sitemap |
|
|
61
|
+
| `output: 'static'` or `'hybrid'` | WARNING | SSR pages need explicit caching strategy |
|
|
62
|
+
| `@astrojs/sitemap` integration | FAIL | Sitemap generation is essential |
|
|
63
|
+
| Image optimization enabled | WARNING | `astro:assets` or `@astrojs/image` for automatic optimization |
|
|
64
|
+
| `trailingSlash` configured | SUGGESTION | Consistent URL format prevents duplicate content |
|
|
65
|
+
|
|
66
|
+
### Meta Tags (Astro Components)
|
|
67
|
+
|
|
68
|
+
| Check | Severity | Details |
|
|
69
|
+
|-------|----------|---------|
|
|
70
|
+
| `<title>` in layout | FAIL | Every page needs a title via layout or head |
|
|
71
|
+
| Meta description | FAIL | Dynamic per-page descriptions |
|
|
72
|
+
| Canonical URL | FAIL | Use `Astro.url` for canonical |
|
|
73
|
+
| OG tags | WARNING | Open Graph for social sharing |
|
|
74
|
+
| JSON-LD injection | WARNING | Structured data in `<Head>` component |
|
|
75
|
+
|
|
76
|
+
### Recommended Astro SEO pattern
|
|
77
|
+
|
|
78
|
+
```astro
|
|
79
|
+
---
|
|
80
|
+
// src/layouts/BaseLayout.astro
|
|
81
|
+
interface Props {
|
|
82
|
+
title: string;
|
|
83
|
+
description: string;
|
|
84
|
+
image?: string;
|
|
85
|
+
schema?: object;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
<head>
|
|
92
|
+
<title>{title} | Canto Vallarta</title>
|
|
93
|
+
<meta name="description" content={description} />
|
|
94
|
+
<link rel="canonical" href={canonicalURL} />
|
|
95
|
+
|
|
96
|
+
<meta property="og:title" content={title} />
|
|
97
|
+
<meta property="og:description" content={description} />
|
|
98
|
+
<meta property="og:url" content={canonicalURL} />
|
|
99
|
+
<meta property="og:image" content={image ?? '/og-default.jpg'} />
|
|
100
|
+
<meta property="og:type" content="website" />
|
|
101
|
+
|
|
102
|
+
{schema && (
|
|
103
|
+
<script type="application/ld+json" set:html={JSON.stringify(schema)} />
|
|
104
|
+
)}
|
|
105
|
+
</head>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Content Collections
|
|
109
|
+
|
|
110
|
+
| Check | Severity | Details |
|
|
111
|
+
|-------|----------|---------|
|
|
112
|
+
| Collections defined in `src/content/config.ts` | WARNING | Type-safe content management |
|
|
113
|
+
| Content schema includes SEO fields | WARNING | title, description, image, schema fields |
|
|
114
|
+
| `getCollection()` used for page generation | SUGGESTION | Static generation from collections |
|
|
115
|
+
| Draft content excluded from build | WARNING | `draft: true` pages should not be published |
|
|
116
|
+
|
|
117
|
+
### Recommended Content Collection schema
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
// src/content/config.ts
|
|
121
|
+
import { defineCollection, z } from 'astro:content';
|
|
122
|
+
|
|
123
|
+
const rooms = defineCollection({
|
|
124
|
+
type: 'content',
|
|
125
|
+
schema: z.object({
|
|
126
|
+
title: z.string(),
|
|
127
|
+
description: z.string().max(160),
|
|
128
|
+
image: z.string(),
|
|
129
|
+
priceRange: z.string(),
|
|
130
|
+
amenities: z.array(z.string()),
|
|
131
|
+
schema: z.object({
|
|
132
|
+
'@type': z.literal('HotelRoom'),
|
|
133
|
+
name: z.string(),
|
|
134
|
+
occupancy: z.number(),
|
|
135
|
+
}).optional(),
|
|
136
|
+
draft: z.boolean().default(false),
|
|
137
|
+
}),
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
export const collections = { rooms };
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Islands Architecture SEO
|
|
144
|
+
|
|
145
|
+
| Check | Severity | Details |
|
|
146
|
+
|-------|----------|---------|
|
|
147
|
+
| Critical content is static | FAIL | SEO-critical content must not be in client islands |
|
|
148
|
+
| `<slot>` used for SEO content | WARNING | Slots render at build time |
|
|
149
|
+
| `client:*` directives on non-interactive content | FAIL | Static content should not be hydrated |
|
|
150
|
+
| `client:only` for third-party scripts | WARNING | Analytics, chat widgets should use `client:only` |
|
|
151
|
+
|
|
152
|
+
### Anti-patterns
|
|
153
|
+
|
|
154
|
+
```astro
|
|
155
|
+
<!-- BAD: SEO content in client island -->
|
|
156
|
+
<RoomDescription client:load />
|
|
157
|
+
|
|
158
|
+
<!-- GOOD: Static SEO content, interactive elements in island -->
|
|
159
|
+
<div class="room-description">
|
|
160
|
+
<Content /> <!-- Static, crawlable -->
|
|
161
|
+
<BookingWidget client:load /> <!-- Interactive, not SEO-critical -->
|
|
162
|
+
</div>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Image Optimization
|
|
166
|
+
|
|
167
|
+
| Check | Severity | Details |
|
|
168
|
+
|-------|----------|---------|
|
|
169
|
+
| `<Image>` component used | WARNING | Automatic format conversion (WebP/AVIF) |
|
|
170
|
+
| `width` and `height` set | FAIL | Prevents CLS |
|
|
171
|
+
| `alt` text present | FAIL | Accessibility and SEO |
|
|
172
|
+
| Responsive sizes configured | WARNING | `sizes` attribute for responsive images |
|
|
173
|
+
| Images in public/ are optimized | WARNING | Manual images bypass Astro optimization |
|
|
174
|
+
|
|
175
|
+
### Sitemap
|
|
176
|
+
|
|
177
|
+
| Check | Severity | Details |
|
|
178
|
+
|-------|----------|---------|
|
|
179
|
+
| `@astrojs/sitemap` installed | FAIL | Required for sitemap generation |
|
|
180
|
+
| Custom `serialize` function | SUGGESTION | Add hreflang, image entries |
|
|
181
|
+
| Dynamic routes in sitemap | WARNING | Ensure all generated pages are included |
|
|
182
|
+
| `lastmod` dates present | SUGGESTION | Helps search engines prioritize crawling |
|
|
183
|
+
|
|
184
|
+
### Recommended sitemap customization
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// astro.config.ts
|
|
188
|
+
import sitemap from '@astrojs/sitemap';
|
|
189
|
+
|
|
190
|
+
export default defineConfig({
|
|
191
|
+
site: 'https://www.cantovallarta.com',
|
|
192
|
+
integrations: [
|
|
193
|
+
sitemap({
|
|
194
|
+
serialize(item) {
|
|
195
|
+
// Add hreflang for multilingual sites
|
|
196
|
+
item.links = [
|
|
197
|
+
{ lang: 'en', url: item.url },
|
|
198
|
+
{ lang: 'es', url: item.url.replace('/en/', '/es/') },
|
|
199
|
+
];
|
|
200
|
+
return item;
|
|
201
|
+
},
|
|
202
|
+
}),
|
|
203
|
+
],
|
|
204
|
+
});
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
### Performance (Astro-specific)
|
|
208
|
+
|
|
209
|
+
| Check | Severity | Details |
|
|
210
|
+
|-------|----------|---------|
|
|
211
|
+
| No unnecessary `client:load` | WARNING | Hydration increases JS bundle |
|
|
212
|
+
| `client:visible` for below-fold islands | SUGGESTION | Lazy hydration |
|
|
213
|
+
| `client:media` for viewport-dependent islands | SUGGESTION | Hydrate only at specific breakpoints |
|
|
214
|
+
| View transitions configured | SUGGESTION | Astro View Transitions for SPA-like navigation |
|
|
215
|
+
|
|
216
|
+
## Output Format
|
|
217
|
+
|
|
218
|
+
```text
|
|
219
|
+
Astro SEO Audit
|
|
220
|
+
===============
|
|
221
|
+
Path: ./src
|
|
222
|
+
Framework: Astro 5.x
|
|
223
|
+
Output mode: static
|
|
224
|
+
Timestamp: 2026-05-29T06:40:00Z
|
|
225
|
+
|
|
226
|
+
Configuration:
|
|
227
|
+
[FAIL] site not configured in astro.config.ts
|
|
228
|
+
[PASS] @astrojs/sitemap installed
|
|
229
|
+
[WARNING] output: 'server' — ensure caching strategy for SEO pages
|
|
230
|
+
|
|
231
|
+
Content:
|
|
232
|
+
[PASS] 12 pages generated from content collections
|
|
233
|
+
[WARNING] 3 pages missing meta description
|
|
234
|
+
|
|
235
|
+
Islands:
|
|
236
|
+
[FAIL] RoomDescription uses client:load for SEO-critical content
|
|
237
|
+
[PASS] BookingWidget correctly uses client:load for interactive element
|
|
238
|
+
|
|
239
|
+
Images:
|
|
240
|
+
[WARNING] 8 images in public/ bypass Astro optimization
|
|
241
|
+
[FAIL] 3 images missing alt text
|
|
242
|
+
|
|
243
|
+
--- Score ---
|
|
244
|
+
Astro SEO: 62/100
|
|
245
|
+
```
|