refactor(home): remove duplicate FAQ section, merge unique Q&As into HomepageFaq
Deploy to Production / Build & Verify (push) Has been cancelled
Deploy to Production / Pre-Deploy Tests (push) Has been cancelled
Deploy to Production / Deploy to Railway (push) Has been cancelled
Deploy to Production / Deploy to Render (push) Has been cancelled
Deploy to Production / Deploy to VPS (PM2) (push) Has been cancelled
Deploy to Production / Deploy to Fly.io (push) Has been cancelled
Deploy to Production / Post-Deploy Verification (push) Has been cancelled
Deploy to Production / Notify on Failure (push) Has been cancelled
E2E Test Suite / Critical User Journeys (push) Has been cancelled
E2E Test Suite / API Integration Tests (push) Has been cancelled
E2E Test Suite / Form Interaction Tests (push) Has been cancelled
E2E Test Suite / Destructive & Chaos Tests (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (chromium) (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (firefox) (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (webkit) (push) Has been cancelled
E2E Test Suite / Mobile Device Tests (push) Has been cancelled
E2E Test Suite / Security Header Tests (push) Has been cancelled
E2E Test Suite / Test Report Summary (push) Has been cancelled
E2E Test Suite / Smoke Tests (P0) (push) Has been cancelled
Ping Search Engines / Notify Search Engines (push) Successful in 3s
Deploy to Production / Build & Verify (push) Has been cancelled
Deploy to Production / Pre-Deploy Tests (push) Has been cancelled
Deploy to Production / Deploy to Railway (push) Has been cancelled
Deploy to Production / Deploy to Render (push) Has been cancelled
Deploy to Production / Deploy to VPS (PM2) (push) Has been cancelled
Deploy to Production / Deploy to Fly.io (push) Has been cancelled
Deploy to Production / Post-Deploy Verification (push) Has been cancelled
Deploy to Production / Notify on Failure (push) Has been cancelled
E2E Test Suite / Critical User Journeys (push) Has been cancelled
E2E Test Suite / API Integration Tests (push) Has been cancelled
E2E Test Suite / Form Interaction Tests (push) Has been cancelled
E2E Test Suite / Destructive & Chaos Tests (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (chromium) (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (firefox) (push) Has been cancelled
E2E Test Suite / Cross-Browser Regression (webkit) (push) Has been cancelled
E2E Test Suite / Mobile Device Tests (push) Has been cancelled
E2E Test Suite / Security Header Tests (push) Has been cancelled
E2E Test Suite / Test Report Summary (push) Has been cancelled
E2E Test Suite / Smoke Tests (P0) (push) Has been cancelled
Ping Search Engines / Notify Search Engines (push) Successful in 3s
The homepage rendered two FAQ blocks — an inline "Common Questions" section
plus the <HomepageFaq /> component above the final CTA — which produced two
FAQPage JSON-LD entries and a redundant accordion. Consolidate on
HomepageFaq (self-contained, polished accordion, better a11y) and:
- delete the inline FAQ <section>, the `faqs` array, the `faq={faqs}` prop
on <SEO>, the orphan .faq-question/.faq-answer/.faq-icon CSS, and the
initFAQ() boot script + its call in index.astro
- merge the 4 unique inline questions (support, process, team augmentation,
security) into HomepageFaq's moneyFaqs; the 2 duplicates (technologies,
timeline) were already covered there
- refresh HomepageFaq's lead-in copy and comments to reflect it as the
single canonical homepage FAQ
Result: one FAQ heading + one accordion in the DOM, exactly one FAQPage
JSON-LD with 10 Q&A pairs, no broken anchor links.
This commit is contained in:
@@ -1,17 +1,12 @@
|
||||
---
|
||||
// HomepageFaq — Money & process FAQ rendered just above the final CTA band.
|
||||
// HomepageFaq — single homepage FAQ section rendered just above the final
|
||||
// CTA band. Covers both buyer-stage objections (cost, timeline, NDA, IP, GeM,
|
||||
// stack) and the process/support/security questions that used to live in the
|
||||
// older "Common Questions" block higher up the page. That earlier block was
|
||||
// removed to avoid a duplicate FAQ rendering and a duplicate FAQPage JSON-LD
|
||||
// emission — this component is now the canonical homepage FAQ.
|
||||
//
|
||||
// Why a dedicated component instead of reusing the "Common Questions" block
|
||||
// further up the page:
|
||||
// - The questions here target buyers in late-stage evaluation (cost,
|
||||
// timeline, NDA, IP, GeM, stack). They convert better when surfaced next
|
||||
// to the final CTA, not next to the testimonials.
|
||||
// - Emitting FAQPage JSON-LD only once per page is the recommended pattern
|
||||
// for rich-result eligibility. The existing FAQ block above also emits a
|
||||
// FAQPage via <SEO> — so this component renders ONLY the visible UI; the
|
||||
// schema for these questions is appended to the parent's `faq` array in
|
||||
// src/pages/index.astro so Google still sees a single, valid FAQPage with
|
||||
// all 12 Q&A pairs.
|
||||
// Emits a single FAQPage JSON-LD inline (below) for rich-result eligibility.
|
||||
//
|
||||
// Accessibility:
|
||||
// - Each question is a real <button> with aria-expanded toggled in JS.
|
||||
@@ -54,13 +49,32 @@ const moneyFaqs = [
|
||||
answer:
|
||||
'Astro, Next.js, Angular, React Native, Spring Boot, Go, Node.js, PostgreSQL, and the full AWS/GCP stack.',
|
||||
},
|
||||
{
|
||||
question: 'Do you offer ongoing support after launch?',
|
||||
answer:
|
||||
'Yes. We offer maintenance packages covering bug fixes, security patches, performance monitoring, and feature enhancements — with response SLAs to match your uptime needs.',
|
||||
},
|
||||
{
|
||||
question: 'What is your development process?',
|
||||
answer:
|
||||
'Agile with 2-week sprints, weekly check-ins, and a live staging environment from day one. You see working software early and steer the roadmap as it ships.',
|
||||
},
|
||||
{
|
||||
question: 'Can you work with our existing team?',
|
||||
answer:
|
||||
'Absolutely. We augment in-house teams as readily as we deliver fully managed builds — adapting to your repo, branch strategy, ticket system, and review process.',
|
||||
},
|
||||
{
|
||||
question: 'How do you ensure project security?',
|
||||
answer:
|
||||
'Security is built into every phase: OWASP-aligned reviews, encrypted data at rest and in transit, role-based access control, regular dependency audits, and compliance with GDPR / SOC 2-style controls where the project demands them.',
|
||||
},
|
||||
];
|
||||
|
||||
// FAQPage JSON-LD — emitted inline so the schema travels with the component.
|
||||
// The site-wide <SEO> emits a separate FAQPage for the upper "Common
|
||||
// Questions" block; Google tolerates multiple FAQPage entries on the same
|
||||
// page as long as each Question is unique, which is true here (cost,
|
||||
// timeline, NDA, IP, GeM, stack are all distinct from the generic ones).
|
||||
// This is the ONLY FAQPage emitted on the homepage; the site-wide <SEO>
|
||||
// no longer receives a `faq` prop on / so Google sees exactly one valid
|
||||
// FAQPage with every visible Q&A pair.
|
||||
const faqPageSchema = {
|
||||
'@context': 'https://schema.org',
|
||||
'@type': 'FAQPage',
|
||||
@@ -97,7 +111,7 @@ const faqPageSchema = {
|
||||
Frequently asked questions
|
||||
</h2>
|
||||
<p class="text-base sm:text-lg text-secondary-600 dark:text-secondary-300">
|
||||
Quick answers on cost, timelines, ownership, and the stack we ship.
|
||||
Quick answers on cost, timelines, ownership, our process, support, security, and the stack we ship.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user