feat: add Google AdSense verification script + expand ad coverage
- index.html: add adsbygoogle.js script with ca-pub-3822257947737372 for verification - BlogPostPage: add bottom-banner AdSlot below article content - AllToolsPage: add bottom-banner AdSlot below tools grid - ComparisonPage: add bottom-banner AdSlot below comparison content - SeoPage: add bottom-banner AdSlot below FAQ section - SeoCollectionPage: add bottom-banner AdSlot below FAQ section Ad coverage: 13 tool pages + homepage + 5 content pages = ~32 ad placements
This commit is contained in:
@@ -52,6 +52,8 @@
|
|||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
|
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3822257947737372"
|
||||||
|
crossorigin="anonymous"></script>
|
||||||
<link rel="dns-prefetch" href="https://fonts.googleapis.com" />
|
<link rel="dns-prefetch" href="https://fonts.googleapis.com" />
|
||||||
<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
|
<link rel="dns-prefetch" href="https://fonts.gstatic.com" />
|
||||||
<link rel="dns-prefetch" href="https://www.googletagmanager.com" />
|
<link rel="dns-prefetch" href="https://www.googletagmanager.com" />
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { useDeferredValue, useMemo, useState } from 'react';
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ArrowRight, Search } from 'lucide-react';
|
import { ArrowRight, Search } from 'lucide-react';
|
||||||
|
import AdSlot from '@/components/layout/AdSlot';
|
||||||
import SEOHead from '@/components/seo/SEOHead';
|
import SEOHead from '@/components/seo/SEOHead';
|
||||||
import BreadcrumbNav from '@/components/seo/BreadcrumbNav';
|
import BreadcrumbNav from '@/components/seo/BreadcrumbNav';
|
||||||
import ManifestToolIcon from '@/components/shared/ManifestToolIcon';
|
import ManifestToolIcon from '@/components/shared/ManifestToolIcon';
|
||||||
@@ -158,6 +159,8 @@ export default function AllToolsPage() {
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
<AdSlot slot="bottom-banner" format="horizontal" className="mt-4" />
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Calendar, ChevronLeft, Clock } from 'lucide-react';
|
import { Calendar, ChevronLeft, Clock } from 'lucide-react';
|
||||||
import { Link, useParams } from 'react-router-dom';
|
import { Link, useParams } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
import AdSlot from '@/components/layout/AdSlot';
|
||||||
import SEOHead from '@/components/seo/SEOHead';
|
import SEOHead from '@/components/seo/SEOHead';
|
||||||
import { getToolSEO } from '@/config/seoData';
|
import { getToolSEO } from '@/config/seoData';
|
||||||
import {
|
import {
|
||||||
@@ -184,6 +185,8 @@ export default function BlogPostPage() {
|
|||||||
</section>
|
</section>
|
||||||
</aside>
|
</aside>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<AdSlot slot="bottom-banner" format="horizontal" className="mt-8" />
|
||||||
</article>
|
</article>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { useParams, Link } from 'react-router-dom';
|
|||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { Helmet } from 'react-helmet-async';
|
import { Helmet } from 'react-helmet-async';
|
||||||
import { CheckCircle, XCircle, MinusCircle, ArrowRight, Swords, Trophy, ExternalLink } from 'lucide-react';
|
import { CheckCircle, XCircle, MinusCircle, ArrowRight, Swords, Trophy, ExternalLink } from 'lucide-react';
|
||||||
|
import AdSlot from '@/components/layout/AdSlot';
|
||||||
import { getComparisonPage, getComparisonPagesByTool, type ComparisonFeature } from '@/config/comparisonData';
|
import { getComparisonPage, getComparisonPagesByTool, type ComparisonFeature } from '@/config/comparisonData';
|
||||||
import { getToolSEO } from '@/config/seoData';
|
import { getToolSEO } from '@/config/seoData';
|
||||||
import { getSiteOrigin, buildSocialImageUrl, getOgLocale, generateWebPage, generateFAQ } from '@/utils/seo';
|
import { getSiteOrigin, buildSocialImageUrl, getOgLocale, generateWebPage, generateFAQ } from '@/utils/seo';
|
||||||
@@ -272,6 +273,8 @@ export default function ComparisonPage() {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
|
<AdSlot slot="bottom-banner" format="horizontal" className="mb-12" />
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ArrowRight, FolderKanban, Link2 } from 'lucide-react';
|
import { ArrowRight, FolderKanban, Link2 } from 'lucide-react';
|
||||||
|
import AdSlot from '@/components/layout/AdSlot';
|
||||||
import BreadcrumbNav from '@/components/seo/BreadcrumbNav';
|
import BreadcrumbNav from '@/components/seo/BreadcrumbNav';
|
||||||
import SEOHead from '@/components/seo/SEOHead';
|
import SEOHead from '@/components/seo/SEOHead';
|
||||||
import FAQSection from '@/components/seo/FAQSection';
|
import FAQSection from '@/components/seo/FAQSection';
|
||||||
@@ -241,6 +242,8 @@ export default function SeoCollectionPage({ slug }: SeoCollectionPageProps) {
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<FAQSection faqs={faqItems} />
|
<FAQSection faqs={faqItems} />
|
||||||
|
|
||||||
|
<AdSlot slot="bottom-banner" format="horizontal" className="mt-8" />
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
import { ArrowRight, CheckCircle, FileText, Link2 } from 'lucide-react';
|
import { ArrowRight, CheckCircle, FileText, Link2 } from 'lucide-react';
|
||||||
|
import AdSlot from '@/components/layout/AdSlot';
|
||||||
import BreadcrumbNav from '@/components/seo/BreadcrumbNav';
|
import BreadcrumbNav from '@/components/seo/BreadcrumbNav';
|
||||||
import SEOHead from '@/components/seo/SEOHead';
|
import SEOHead from '@/components/seo/SEOHead';
|
||||||
import FAQSection from '@/components/seo/FAQSection';
|
import FAQSection from '@/components/seo/FAQSection';
|
||||||
@@ -322,6 +323,8 @@ export default function SeoPage({ slug }: SeoPageProps) {
|
|||||||
</section>
|
</section>
|
||||||
|
|
||||||
<FAQSection faqs={faqItems} />
|
<FAQSection faqs={faqItems} />
|
||||||
|
|
||||||
|
<AdSlot slot="bottom-banner" format="horizontal" className="mt-8" />
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user