Loading...
Loading...
Compare original and translation side by side
product-detailsproduct-detailsstorefront-setupstorefront-setupstorefront-setupcatalog-auditstructured-datasitemap-auditstorefront-setupcatalog-auditstructured-datasitemap-auditcurl -sL -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
"https://store.example.com/products/blue-jacket" -o raw.htmlcurl -sL -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
"https://store.example.com/products/blue-jacket" -o raw.html
For each page, record whether each element is in the initial HTML or added by JS:
| Content Element | In Initial HTML? | Added by JS? | SEO Impact |
|----------------|:---------------:|:------------:|------------|
| Product name (H1) | ? | ? | Critical |
| Product price | ? | ? | Critical (rich results) |
| Product description | ? | ? | High |
| Product images | ? | ? | High |
| `<title>` | ? | ? | Critical |
| `<meta name="description">` | ? | ? | High |
| `og:title`, `og:image` | ? | ? | Medium |
| JSON-LD structured data | ? | ? | High |
| Canonical URL | ? | ? | Critical |
If the initial HTML contains none of the product-specific content, that is a **P0 crawlability risk**.
---
对每个页面,记录每个元素是在初始HTML中还是由JS添加:
| 内容元素 | 是否在初始HTML中? | 是否由JS添加? | SEO影响 |
|----------------|:---------------:|:------------:|------------|
| 产品名称(H1) | ? | ? | 关键 |
| 产品价格 | ? | ? | 关键(富结果) |
| 产品描述 | ? | ? | 高 |
| 产品图片 | ? | ? | 高 |
| `<title>` | ? | ? | 关键 |
| `<meta name="description">` | ? | ? | 高 |
| `og:title`, `og:image` | ? | ? | 中 |
| JSON-LD结构化数据 | ? | ? | 高 |
| 规范URL | ? | ? | 关键 |
如果初始HTML不包含任何产品特定内容,这是**P0级可爬取性风险**。
---<head>{Product Name} | {Brand}og:titleog:descriptionog:imageog:type=productog:urlog:image<head>{产品名称} | {品牌}og:titleog:descriptionog:imageog:type=productog:urlog:image<script type="application/ld+json">Productproduct-details.jsfunction injectProductSchema(product) {
const schema = {
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
image: product.images?.map((i) => i.url),
description: product.description,
sku: product.sku,
brand: product.brand ? { '@type': 'Brand', name: product.brand } : undefined,
offers: {
'@type': 'Offer',
price: product.price.final,
priceCurrency: product.price.currency,
availability: product.inStock
? 'https://schema.org/InStock'
: 'https://schema.org/OutOfStock',
url: window.location.href,
},
};
Object.keys(schema).forEach((k) => schema[k] === undefined && delete schema[k]);
const el = document.createElement('script');
el.type = 'application/ld+json';
el.textContent = JSON.stringify(schema);
document.head.appendChild(el);
}Product<script type="application/ld+json">product-details.jsfunction injectProductSchema(product) {
const schema = {
'@context': 'https://schema.org',
'@type': 'Product',
name: product.name,
image: product.images?.map((i) => i.url),
description: product.description,
sku: product.sku,
brand: product.brand ? { '@type': 'Brand', name: product.brand } : undefined,
offers: {
'@type': 'Offer',
price: product.price.final,
priceCurrency: product.price.currency,
availability: product.inStock
? 'https://schema.org/InStock'
: 'https://schema.org/OutOfStock',
url: window.location.href,
},
};
Object.keys(schema).forEach((k) => schema[k] === undefined && delete schema[k]);
const el = document.createElement('script');
el.type = 'application/ld+json';
el.textContent = JSON.stringify(schema);
document.head.appendChild(el);
}<head><link rel="canonical">.aem.page.aem.live?color=bluehead.html<head><link rel="canonical">.aem.page.aem.live?color=bluehead.htmlcurl -sL "https://store.example.com/robots.txt"/products//categories/DisallowSitemap:async function generateProductSitemap(products, base) {
const urls = products
.map((p) => ` <url>\n <loc>${base}/products/${p.urlKey}</loc>\n` +
` <lastmod>${p.updatedAt.slice(0, 10)}</lastmod>\n </url>`)
.join('\n');
return `<?xml version="1.0" encoding="UTF-8"?>\n` +
`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n${urls}\n</urlset>`;
}<lastmod>curl -sL "https://store.example.com/robots.txt"/products//categories/DisallowSitemap:async function generateProductSitemap(products, base) {
const urls = products
.map((p) => ` <url>\n <loc>${base}/products/${p.urlKey}</loc>\n` +
` <lastmod>${p.updatedAt.slice(0, 10)}</lastmod>\n </url>`)
.join('\n');
return `<?xml version="1.0" encoding="UTF-8"?>\n` +
`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n${urls}\n</urlset>`;
}<lastmod>loading="eager"fetchpriority="high"loading="eager"fetchpriority="high"| Check | Status | Priority | Details |
|---|---|---|---|
| Product content in initial HTML | Pass/Fail | P0 | % in initial HTML vs JS-rendered |
| Title contains product name | Pass/Fail | P0 | Current title |
| Meta description product-specific | Pass/Fail | P1 | Current description |
| Product JSON-LD present + accurate | Pass/Fail | P0 | Properties, price/availability match |
| Canonical URL correct | Pass/Fail | P0 | Current canonical |
| Product URLs in sitemap | Pass/Fail | P0 | Count found |
| Image alt text | Pass/Fail | P1 | Sample values |
| LCP image loading priority | Pass/Fail | P0 | Loading attribute |
| Robots.txt allows product crawling | Pass/Fail | P0 | Relevant directives |
| 检查项 | 状态 | 优先级 | 详情 |
|---|---|---|---|
| 产品内容是否在初始HTML中 | 通过/失败 | P0 | 初始HTML与JS渲染内容的占比 |
| Title是否包含产品名称 | 通过/失败 | P0 | 当前标题 |
| Meta描述是否为产品特定 | 通过/失败 | P1 | 当前描述 |
| Product JSON-LD是否存在且准确 | 通过/失败 | P0 | 属性、价格/库存状态匹配情况 |
| 规范URL是否正确 | 通过/失败 | P0 | 当前规范URL |
| 产品URL是否在站点地图中 | 通过/失败 | P0 | 已找到的数量 |
| 图片替代文本 | 通过/失败 | P1 | 抽样值 |
| LCP图片加载优先级 | 通过/失败 | P0 | Loading属性 |
| Robots.txt是否允许产品爬取 | 通过/失败 | P0 | 相关指令 |