T.ME/BIBIL_0DAY
CasperSecurity


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/public_html/scripts/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/gositeme/domains/lavocat.quebec/public_html/scripts/test-faq-implementation.ts
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'); 

CasperSecurity Mini