@@ -376,6 +376,42 @@ async function generateTools(toolsIndex, lang) {
376376 categoryBadges += '</small></div>' ;
377377 }
378378
379+ // Generate BreadcrumbList Schema.org
380+ const breadcrumbItems = [ {
381+ "@type" : "ListItem" ,
382+ "position" : 1 ,
383+ "name" : "FastTools" ,
384+ "item" : `https://${ siteConfig . domain } ${ lang === siteConfig . defaultLanguage ? '' : '/' + lang } `
385+ } ] ;
386+
387+ if ( toolCategories . length > 0 ) {
388+ toolCategories . forEach ( ( catId , index ) => {
389+ const cat = categories . find ( c => c . id === catId ) ;
390+ if ( cat ) {
391+ const catUrl = lang === siteConfig . defaultLanguage ? `https://${ siteConfig . domain } /${ cat . slug [ lang ] } .html` : `https://${ siteConfig . domain } /${ lang } /${ cat . slug [ lang ] } .html` ;
392+ breadcrumbItems . push ( {
393+ "@type" : "ListItem" ,
394+ "position" : index + 2 ,
395+ "name" : cat . name [ lang ] ,
396+ "item" : catUrl
397+ } ) ;
398+ }
399+ } ) ;
400+ }
401+
402+ breadcrumbItems . push ( {
403+ "@type" : "ListItem" ,
404+ "position" : breadcrumbItems . length + 1 ,
405+ "name" : translatedTool . title
406+ } ) ;
407+
408+ const breadcrumbSchema = {
409+ "@context" : "https://schema.org" ,
410+ "@type" : "BreadcrumbList" ,
411+ "itemListElement" : breadcrumbItems
412+ } ;
413+
414+ generatedHtml = generatedHtml . replace ( / { { schema_ o r g _ j s o n } } / g, JSON . stringify ( breadcrumbSchema , null , 2 ) ) ;
379415 generatedHtml = generatedHtml . replace ( / { { category_ b a d g e s } } / g, categoryBadges ) ;
380416 generatedHtml = generatedHtml . replace ( / { { tool_ c o n t e n t } } / g, toolContent ) ;
381417 // Inject translations as global variable for JS
0 commit comments