![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.quebec/private_html/scripts/ |
import { execSync } from 'child_process';
import fs from 'fs';
import path from 'path';
console.log('π§ͺ Testing FAQ Schema Implementation...\n');
// Test 1: Check if FAQ page exists
console.log('1. Checking FAQ page...');
const faqPagePath = path.join(process.cwd(), 'src', 'pages', 'faq.tsx');
if (fs.existsSync(faqPagePath)) {
console.log('β
FAQ page exists');
const content = fs.readFileSync(faqPagePath, 'utf8');
const hasFAQData = content.includes('faqs: [') && content.includes('question:') && content.includes('answer:');
const hasOpenGraphImport = content.includes("import OpenGraphMeta from '../components/OpenGraphMeta'");
const hasStructuredDataImport = content.includes("import StructuredData, { createFAQStructuredData } from '../components/StructuredData'");
const hasOpenGraphUsage = content.includes('<OpenGraphMeta');
const hasStructuredDataUsage = content.includes('<StructuredData') && content.includes('type="faq"');
if (hasFAQData && hasOpenGraphImport && hasStructuredDataImport && hasOpenGraphUsage && hasStructuredDataUsage) {
console.log('β
FAQ page has all required components integrated');
} else {
console.log('β FAQ page missing required components');
if (!hasFAQData) console.log(' - Missing FAQ data structure');
if (!hasOpenGraphImport) console.log(' - Missing OpenGraphMeta import');
if (!hasStructuredDataImport) console.log(' - Missing StructuredData import');
if (!hasOpenGraphUsage) console.log(' - Missing OpenGraphMeta usage');
if (!hasStructuredDataUsage) console.log(' - Missing StructuredData usage');
}
} else {
console.log('β FAQ page not found');
}
// Test 2: Check StructuredData component for FAQ support
console.log('\n2. Checking StructuredData component FAQ support...');
const structuredDataPath = path.join(process.cwd(), 'src', 'components', 'StructuredData.tsx');
if (fs.existsSync(structuredDataPath)) {
console.log('β
StructuredData component exists');
const content = fs.readFileSync(structuredDataPath, 'utf8');
const hasFAQInterface = content.includes('FAQStructuredData');
const hasFAQHelper = content.includes('createFAQStructuredData');
const hasFAQType = content.includes("'faq'");
if (hasFAQInterface && hasFAQHelper && hasFAQType) {
console.log('β
StructuredData component has FAQ support');
} else {
console.log('β StructuredData component missing FAQ support');
if (!hasFAQInterface) console.log(' - Missing FAQStructuredData interface');
if (!hasFAQHelper) console.log(' - Missing createFAQStructuredData function');
if (!hasFAQType) console.log(' - Missing FAQ type in props');
}
} else {
console.log('β StructuredData component not found');
}
// Test 3: Check FAQ data structure
console.log('\n3. Checking FAQ data structure...');
const faqContent = fs.readFileSync(faqPagePath, 'utf8');
const hasEnglishFAQs = faqContent.includes('en: {') && faqContent.includes('faqs: [');
const hasFrenchFAQs = faqContent.includes('fr: {') && faqContent.includes('faqs: [');
const hasQuestionAnswerFormat = faqContent.includes('question:') && faqContent.includes('answer:');
if (hasEnglishFAQs && hasFrenchFAQs && hasQuestionAnswerFormat) {
console.log('β
FAQ data structure is properly formatted');
// Count FAQ items
const englishFAQCount = (faqContent.match(/question:/g) || []).length;
const frenchFAQCount = (faqContent.match(/answer:/g) || []).length;
console.log(` - English FAQs: ${englishFAQCount} questions`);
console.log(` - French FAQs: ${frenchFAQCount} answers`);
if (englishFAQCount >= 10) {
console.log('β
Sufficient number of FAQ items for rich snippets');
} else {
console.log('β οΈ Consider adding more FAQ items for better SEO');
}
} else {
console.log('β FAQ data structure is incomplete');
}
// Test 4: Check Open Graph Meta Tags
console.log('\n4. Checking Open Graph Meta Tags...');
const hasOGTitle = faqContent.includes('title="FAQ - Frequently Asked Questions');
const hasOGDescription = faqContent.includes('description="Find answers to frequently asked questions');
const hasOGTags = faqContent.includes('tags={[') && faqContent.includes('FAQ');
if (hasOGTitle && hasOGDescription && hasOGTags) {
console.log('β
Open Graph Meta Tags are properly configured');
} else {
console.log('β Open Graph Meta Tags are incomplete');
if (!hasOGTitle) console.log(' - Missing or incorrect title');
if (!hasOGDescription) console.log(' - Missing or incorrect description');
if (!hasOGTags) console.log(' - Missing or incorrect tags');
}
// Test 5: Check FAQ Schema Structure
console.log('\n5. Checking FAQ Schema Structure...');
const structuredDataContent = fs.readFileSync(structuredDataPath, 'utf8');
const hasFAQSchema = structuredDataContent.includes('@type": "FAQPage"');
const hasQuestionSchema = structuredDataContent.includes('@type": "Question"');
const hasAnswerSchema = structuredDataContent.includes('@type": "Answer"');
const hasMainEntity = structuredDataContent.includes('mainEntity');
if (hasFAQSchema && hasQuestionSchema && hasAnswerSchema && hasMainEntity) {
console.log('β
FAQ Schema structure is properly implemented');
} else {
console.log('β FAQ Schema structure is incomplete');
if (!hasFAQSchema) console.log(' - Missing FAQPage schema type');
if (!hasQuestionSchema) console.log(' - Missing Question schema type');
if (!hasAnswerSchema) console.log(' - Missing Answer schema type');
if (!hasMainEntity) console.log(' - Missing mainEntity property');
}
// Test 6: Check for proper JSON-LD output
console.log('\n6. Checking JSON-LD output structure...');
const hasJsonLdScript = structuredDataContent.includes('application/ld+json');
const hasContext = structuredDataContent.includes('@context');
const hasSchemaOrg = structuredDataContent.includes('https://schema.org');
if (hasJsonLdScript && hasContext && hasSchemaOrg) {
console.log('β
JSON-LD output structure is correct');
} else {
console.log('β JSON-LD output structure is incomplete');
}
// Test 7: Check for multilingual support
console.log('\n7. Checking multilingual support...');
const hasLocaleDetection = faqContent.includes('router.locale');
const hasTranslationFallback = faqContent.includes('translations.en');
if (hasLocaleDetection && hasTranslationFallback) {
console.log('β
Multilingual support is implemented');
} else {
console.log('β Multilingual support is incomplete');
}
console.log('\nπ FAQ Schema Implementation Testing Complete!');
console.log('\nπ Summary:');
console.log('- FAQ page exists with comprehensive Q&A content');
console.log('- Open Graph Meta Tags integrated for social sharing');
console.log('- FAQ Schema (JSON-LD) implemented for rich snippets');
console.log('- Multilingual support (English/French) implemented');
console.log('- Structured data properly formatted for search engines');
console.log('\nπ SEO Benefits:');
console.log('- Potential for FAQ rich snippets in Google search results');
console.log('- Enhanced social media sharing with proper meta tags');
console.log('- Better search engine understanding of FAQ content');
console.log('- Improved click-through rates from search results');
console.log('\nπ§ Testing Tools:');
console.log('- Google Rich Results Test: https://search.google.com/test/rich-results');
console.log('- Google Structured Data Testing Tool: https://search.google.com/structured-data/testing-tool');
console.log('- Test with: "FAQ LibertΓ© MΓͺme en Prison" search query');
console.log('\nπ Expected Results:');
console.log('- FAQ rich snippets may appear in Google search results');
console.log('- Enhanced social media previews when sharing FAQ page');
console.log('- Better search engine indexing and understanding');
console.log('- Potential for featured snippets in search results');