adobe / adobe/structured-data-validator

Feature Request: Add validators for LocalBusiness, Article, Event, FAQPage, and other common types, and child schema validation

オープン
#56 コメント 0 件 リアクション 2 件 担当者 0 名 GitHub で見る
主要言語
JavaScript
スター
15
フォーク
3
PR マージ指標
30日以内にマージされた PR はありません

説明

## Summary

The library currently returns zero validation errors for several commonly-used schema.org types that Google Rich Results actively supports, including `LocalBusiness`, `Article`, `Event`, `FAQPage`, `HowTo`, `WebSite`, and `WebPage`.

## Reproduction

```javascript
const testData = {
jsonld: {
LocalBusiness: [{
'@type': 'LocalBusiness'
// Missing required fields: name, address, etc.
}]
},
microdata: {},
rdfa: {},
errors: []
};

const issues = await validator.validate(testData);
console.log(issues.length); // 0 — No errors reported
```

## Expected Behavior

The validator should report missing required fields per [Google's structured data guidelines](https://developers.google.com/search/docs/appearance/structured-data).

For example, `LocalBusiness` should validate:

**Required:**
- `name`
- `address` (PostalAddress object)

**Recommended:**
- `telephone`
- `openingHoursSpecification`
- `geo` (GeoCoordinates)
- `image`
- `priceRange`

## Schema Types Affected

| Type | Google Rich Results Page |
|------|--------------------------|
| LocalBusiness | [docs](https://developers.google.com/search/docs/appearance/structured-data/local-business) |
| Article | [docs](https://developers.google.com/search/docs/appearance/structured-data/article) |
| Event | [docs](https://developers.google.com/search/docs/appearance/structured-data/event) |
| FAQPage | [docs](https://developers.google.com/search/docs/appearance/structured-data/faqpage) |
| HowTo | [docs](https://developers.google.com/search/docs/appearance/structured-data/how-to) |
| WebSite | [docs](https://developers.google.com/search/docs/appearance/structured-data/sitelinks-searchbox) |
| WebPage | Part of various structured data types |

## Impact

Users may believe their structured data is valid when critical fields are missing, leading to:
- Failed rich result eligibility in Google Search
- Poor SEO outcomes
- Confusion when Google Search Console reports errors that this validator missed

## Proposed Solution

Add validator classes for the missing types following the existing pattern. Example:

```javascript
// src/types/LocalBusiness.js
import BaseValidator from './base.js';

export default class LocalBusinessValidator extends BaseValidator {
getConditions() {
return [
this.required('name'),
this.required('address', 'object'),
this.recommended('telephone'),
this.recommended('openingHoursSpecification', 'array'),
this.recommended('geo', 'object'),
this.recommended('image', 'url'),
this.recommended('priceRange'),
].map((c) => c.bind(this));
}
}
```

Then register in `src/Validator.js`:

```javascript
this.registeredHandlers = {
// ... existing handlers
LocalBusiness: [() => import('./types/LocalBusiness.js')],
};
```

### Problem: Subtypes are not validated

Currently, if a schema uses a subtype like `Restaurant`, `NewsArticle`, or `MusicEvent`, the validator returns **zero errors** even when required fields are missing.

**Example:**
const data = {
jsonld: {
Restaurant: [{
'@type': 'Restaurant'
// Missing name, address - but no errors reported!
}]
},
microdata: {},
rdfa: {},
errors: []
};

const issues = await validator.validate(data);
console.log(issues.length); // 0 — No validation!

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

既存の validator クラスと src/Validator.js の登録パターンを確認し、一覧にある Google 構造化データの要件を対象となる型と比較してください。LocalBusiness の例を出発点として、Restaurant、NewsArticle、MusicEvent などのサブタイプ入力が、検証なしで通過しなくなっていることを確認してください。対応している型が不足している必須フィールドを報告し、推奨フィールドを要求どおりに表現できれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript
領域
tooling
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
30/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。