@osdeibi/bucky-seo-react
Version:
React component for managing meta tags, Open Graph, and dynamic JSON-LD
94 lines (91 loc) • 2.31 kB
text/typescript
import type { StructuredData } from "../DynamicHead.types";
/**
* Props para VacationRental, según el ejemplo de Google:
* - Debes incluir al menos containsPlace (Accommodation) y otros required props.
* - Puedes añadir las recommended properties opcionales.
*/
export interface VacationRentalProps {
additionalType?: string;
brand?: {
"@type": "Brand";
name: string;
};
containsPlace: {
"@type": "Accommodation";
additionalType?: string;
bed?: {
"@type": "BedDetails";
numberOfBeds: number;
typeOfBed: string;
}[];
occupancy: {
"@type": "QuantitativeValue";
value: number;
};
amenityFeature?: Array<{
"@type": "LocationFeatureSpecification";
name: string;
value: boolean;
}>;
floorSize?: {
"@type": "QuantitativeValue";
value: number;
unitCode: string;
};
numberOfBathroomsTotal?: number;
numberOfBedrooms?: number;
numberOfRooms?: number;
};
identifier: string;
latitude: string | number;
longitude: string | number;
name: string;
address: {
"@type": "PostalAddress";
addressCountry: string;
addressLocality: string;
addressRegion: string;
postalCode: string;
streetAddress: string;
};
aggregateRating?: {
"@type": "AggregateRating";
ratingValue: number;
ratingCount?: number;
reviewCount?: number;
bestRating?: number;
};
image: string[];
checkinTime?: string; // e.g. "18:00:00+08:00"
checkoutTime?: string; // e.g. "11:00:00+08:00"
description?: string;
knowsLanguage?: string[];
review?: Array<{
"@type": "Review";
reviewRating: {
"@type": "Rating";
ratingValue: number;
bestRating?: number;
};
author: {
"@type": "Person";
name: string;
};
datePublished?: string;
contentReferenceTime?: string;
}>;
}
/**
* Generador de esquema VacationRental que inyecta el JSON-LD con @context y @type.
* Basado en el ejemplo oficial de Google Search Central. :contentReference[oaicite:0]{index=0}
*/
export function vacationRental(opts: VacationRentalProps): StructuredData {
return {
type: "VacationRental",
data: {
"@context": "https://schema.org",
"@type": "VacationRental",
...opts,
},
};
}