Technical SEO Checklist: 12 Factors That Move Rankings – BuiltToWinWeb
EN ES FR DE IT PT ZH JA KO RU NL
← Back to all articles

Technical SEO Checklist: 12 Factors That Actually Move Rankings (2026)

I’m Jacob Campbell, and most SEO checklists are bloated with irrelevant items. Here are the 12 technical factors that have a direct, measurable impact on organic rankings — and exactly how to implement each on a custom PHP site. Master these and you’ll fix 90% of technical SEO problems.

Key facts

  • 12 — Ranking factors
  • 90% — Of technical SEO issues
  • 3 clicks — Max crawl depth
  • +67% — Traffic (case study)

1. Crawlability — robots.txt done right

Your robots.txt tells search engines which URLs to crawl and which to ignore. Misconfigured, it can block whole sections; configured well, it saves crawl budget for your important pages.

User-agent: *
Allow: /
Disallow: /admin/
Disallow: /*?sort=
Disallow: /*?filter=
Sitemap: https://built2winweb.com/sitemap.xml

Block parameter URLs (?sort=, ?filter=) to avoid duplicate content, block admin areas, and always include the Sitemap directive. Test with the robots.txt checker in Search Console.

2. XML sitemap — dynamic, always current

A static sitemap goes stale. Generate a dynamic sitemap.php that queries your database and outputs XML, then route /sitemap.xml to it.

<?php
header('Content-Type: application/xml');
echo '<?xml version="1.0" encoding="UTF-8"?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
foreach (getAllSiteUrls() as $u) {
    echo '<url><loc>' . htmlspecialchars($u['loc']) . '</loc>'
       . '<lastmod>' . $u['lastmod'] . '</lastmod></url>';
}
echo '</urlset>';

Add RewriteRule ^sitemap\.xml$ sitemap.php [L] and submit it in Search Console → Sitemaps.

3. Canonical tags — eliminate duplicate content

Canonical tags tell Google which version of a page is the master. Use them on paginated pages, filtered product lists and any URL reachable via multiple paths.

<link rel="canonical" href="https://<?= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ?>">

For paginated series (e.g. blog page 2), point the canonical to the main page:

if ($page > 1) {
    echo '<link rel="canonical" href="https://example.com/blog/">';
}

4. Structured data — JSON-LD at minimum

At minimum, implement Organization on the homepage (logo, social profiles), LocalBusiness on the contact page (address, phone, hours), and Article on blog posts (author, publish date, headline). Validate with the Rich Results Test — see our full schema guide for code.

5. Mobile-first design — beyond “responsive”

Google indexes the mobile version of your site first. Responsive is the baseline, but also ensure:

  • <meta name="viewport" content="width=device-width, initial-scale=1">.
  • Touch targets (buttons, links) at least 44×44px.
  • No horizontal scroll (test in DevTools device toolbar).
  • Font sizes at least 16px to avoid auto-zoom.

6. HTTPS + security headers — trust and ranking

HTTPS is a light ranking signal and essential for trust. Force it via .htaccess:

RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

And add security headers:

Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header set X-Frame-Options "SAMEORIGIN"
Header set X-Content-Type-Options "nosniff"

7. Core Web Vitals — LCP, INP, CLS

Google’s page-experience signals are ranking factors. Reach “good”:

  • LCP < 2.5s — preload the hero image, inline critical CSS, use a CDN.
  • INP < 200ms — break up long JS tasks, defer third-party scripts.
  • CLS < 0.1 — add explicit width/height to images, use font-display: swap.

Monitor via Search Console → Core Web Vitals report.

8. Internal linking — distribute authority to depth

Internal links spread link value across your site. Every page should be reachable within 3 clicks of the homepage.

  • Use descriptive anchor text (“custom PHP ecommerce development”, not “click here”).
  • Link from high-authority pages (homepage, core service pages) to deeper content.
  • Add a “related posts” section on blog articles.
  • Include contextual links within body text, not just in navigation.

Audit with Screaming Frog → Internal tab to find orphan pages (zero internal links).

9. No broken links (404s) — crawl-budget wasters

Every 404 wastes crawl budget and frustrates users. Audit monthly:

  1. Crawl your site with Screaming Frog (free up to 500 URLs).
  2. Filter by “Client Error (4xx)”.
  3. For each broken link, fix the URL or add a 301 to a relevant page.

Also monitor Search Console → Coverage → Errors.

10. Pagination — use rel="prev" and rel="next"

For paginated series (blog pages 1, 2, 3), add these link tags to consolidate indexing:

<link rel="prev" href="https://example.com/blog/page/2/">
<link rel="next" href="https://example.com/blog/page/4/">

This tells Google pages 2, 3, 4 are part of a series — preventing duplicate-content issues and consolidating link value toward the main page.

11. Hreflang for multi-language / multi-region sites

If you target different countries or languages, use hreflang annotations to avoid duplicate content in international results:

<link rel="alternate" hreflang="en-us" href="https://built2winweb.com/">
<link rel="alternate" hreflang="en-gb" href="https://built2winweb.com/uk/">
<link rel="alternate" hreflang="x-default" href="https://built2winweb.com/">

Generate these dynamically in your PHP <head> based on the page’s language/region.

12. Log file analysis — understand Googlebot’s behaviour

Your server logs show exactly which URLs Googlebot crawls, how often, and which return errors. It’s the most underused technical SEO tool.

# Count Googlebot hits per URL
grep "Googlebot" access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20

Look for crawl budget wasted on low-value pages (block them in robots.txt), 404s (fix redirects), and pages never crawled (make sure they’re internally linked and in the sitemap).

Putting it together — a PHP audit script

You can build a simple PHP script to check several of these automatically:

<?php
// quick technical-SEO check
$issues = [];
if (empty($_SERVER['HTTPS'])) $issues[] = 'HTTPS not forced';
$home = file_get_contents('https://built2winweb.com/');
if (!str_contains($home, 'rel="canonical"')) $issues[] = 'Missing canonical on homepage';
if (!str_contains($home, 'application/ld+json')) $issues[] = 'Missing structured data';
echo $issues ? '⚠️ Issues: ' . implode(', ', $issues) : '✅ All technical checks passed!';

Case study: fixing these 12 factors raised traffic 67%

A B2B software company had a custom PHP site but neglected technical SEO. Their problems:

  • No XML sitemap, so Google missed 40% of pages.
  • Duplicate content from ?sort= parameters.
  • Missing canonical tags on paginated blog pages.
  • No JSON-LD — zero rich snippets.
  • CLS of 0.27 on mobile from unsized images.

Actions taken: implemented a dynamic sitemap and submitted it; added robots.txt to block parameter URLs; added canonical tags site-wide; added LocalBusiness and Article schema; set explicit width/height on images and inlined critical CSS.

Results after 90 days:

  • Indexed pages rose from 340 → 1,200.
  • Organic traffic rose 67%.
  • Branded-SERP CTR rose 22% (from schema).
  • Core Web Vitals now pass on mobile (previously poor).

No extra content or backlinks — just technical fixes.

Sources &amp; further reading

Related services

Frequently asked questions

What are the most important technical SEO factors?

Crawlability (robots.txt), a current XML sitemap, canonical tags, structured data, mobile-first design, HTTPS, Core Web Vitals and clean internal linking.

How deep should pages be from the homepage?

Every important page should be reachable within 3 clicks. Deeper pages get crawled less and rank worse.

Do I need a dynamic sitemap?

Yes if your content changes — a dynamic sitemap.php stays current automatically, where a static file goes stale and hides new pages.

How do canonical tags help?

They tell Google which version of a page is the master, preventing duplicate-content dilution from parameters and pagination.

What is log file analysis?

Reading your server logs to see exactly what Googlebot crawls — the best way to find wasted crawl budget and pages Google never visits.

How much does a custom PHP site cost?

Three flat-fee packages: a business pro site at $1,750, an ecommerce site at $5,600, and SaaS / web apps at $10,000 — all one-time, no monthly fees.

Do you do technical SEO audits?

Yes — I audit crawlability, indexing, structured data, Core Web Vitals and log files on custom PHP sites, then fix what’s found.

Technical SEO audit — ready to level up your site?

I run full technical SEO audits on custom PHP sites — crawlability, indexing, structured data, Core Web Vitals and log-file analysis — then fix what’s found. One flat fee.

Get my free quote