()
| 154 | }; |
| 155 | |
| 156 | export const createHomeStructuredData = () => ({ |
| 157 | '@context': 'https://schema.org', |
| 158 | '@graph': [ |
| 159 | { |
| 160 | '@type': 'WebSite', |
| 161 | name: siteConfig.name, |
| 162 | url: siteConfig.url, |
| 163 | inLanguage: siteConfig.language, |
| 164 | }, |
| 165 | { |
| 166 | '@type': 'CollectionPage', |
| 167 | name: 'Libros gratis de programación en español', |
| 168 | description: |
| 169 | 'Biblioteca curada de libros y guías gratuitas de programación en español, organizada por lenguajes, frameworks, herramientas y fundamentos.', |
| 170 | inLanguage: siteConfig.language, |
| 171 | url: siteConfig.url, |
| 172 | hasPart: sectionPageEntries.map((entry) => ({ |
| 173 | '@type': 'CollectionPage', |
| 174 | name: getSectionPageTitle(entry), |
| 175 | url: getSectionCanonicalUrl(entry), |
| 176 | })), |
| 177 | mainEntity: { |
| 178 | '@type': 'ItemList', |
| 179 | name: 'Biblioteca de libros de programación gratis en español', |
| 180 | numberOfItems: totalBooks, |
| 181 | itemListElement: allBooks.map((book, index) => ({ |
| 182 | '@type': 'ListItem', |
| 183 | position: index + 1, |
| 184 | item: bookStructuredData(book), |
| 185 | })), |
| 186 | }, |
| 187 | }, |
| 188 | ], |
| 189 | }); |
| 190 | |
| 191 | export const createSectionStructuredData = (entry: SectionPageEntry) => ({ |
| 192 | '@context': 'https://schema.org', |
nothing calls this directly
no test coverage detected