AXY · Technical SEO & AI Search Audit

AXY Global

axyglobal.com  ·  September 2026  ·  Static site on Netlify

What this is

All 7 pages of the live site checked the way Google and AI assistants read them: speed on phone and desktop, HTML structure, structured data, images, video, links, AI-agent access.

Two things hold the site back: the English page tells Google its address is the bare domain instead of /en/ (the single item Lighthouse fails), and every visit downloads 11.4 MB (a 5.2 MB autoplay video plus 7.6 MB of uncompressed images), which drops desktop performance to 52.

Below: three tables, one task per row, with time and budget. Technical details under a task opens the page lists and code. Total 37.5 hours, $1,500.

68
Performance Mobile
LCP 5.1 s · CLS 0
52
Performance Desktop
blocked 1,850 ms · LCP 2.5 s
92
Lighthouse SEO
only failure: canonical
11.4
MB per visit
5.2 MB video · 5.3 MB images
316
Words on the page
10 services added by script
7
Pages crawled
2 languages · 4 policies · 1 stub
Already in good shape
No action needed. Listed so the tables below are not read as everything is broken.
Good
Tasks
Critical
Do these first. The address Google is told to index, the missing crawl files, and the 11.4 MB the page ships on every visit.
#TaskWhat to doWhat it affectsWhy it mattersBudget · Time
1 Point the English page canonical at itself On /en/ change the canonical, og:url and twitter:url from https://axyglobal.com/ to https://axyglobal.com/en/. The Russian page already does this correctly, so copy its pattern. Google rankings · Index quality · Which page shows in results A canonical tag tells Google the real address of a page. Right now the English page says its real address is the bare domain, which serves a 239 byte holding page with no content, so Google is being asked to index a blank page instead of the site. This is the only item Lighthouse fails in its SEO check. $401 h
Technical details

Lighthouse verdict on both mobile and desktop: "Document does not have a valid rel=canonical. Points to the domain's root URL (the homepage), instead of an equivalent page of content."

PageCanonical todayShould beStatus
/en/https://axyglobal.com/https://axyglobal.com/en/Wrong
/ru/https://axyglobal.com/ru/https://axyglobal.com/ru/Correct

The same three tags on /en/ carry the wrong value:

  • <link rel="canonical" href="https://axyglobal.com/">
  • <meta property="og:url" content="https://axyglobal.com/">
  • <meta name="twitter:url" content="https://axyglobal.com/">

This also contradicts the hreflang block on the same page, which correctly lists https://axyglobal.com/en/ as both the English and the x-default version. When a canonical and an hreflang disagree, Google follows the canonical and ignores the hreflang, so the language setup stops working too.

2 Replace the root page with a real 301 redirect Delete the holding page at / and add a _redirects file to the Netlify deploy with / /en/ 301. Keep a language check later if you want, but the default must be a server redirect, not an HTML page. Google rankings · Index quality · Speed on first visit The bare domain currently answers with a tiny HTML page that uses a meta refresh to bounce visitors to /en/. Google treats this as a weak signal rather than a clean move, and every visitor pays for two page loads instead of one. This is also the address the English page names as its canonical, so the two problems compound. $601.5 h
Technical details

https://axyglobal.com/ returns HTTP 200 with a 239 byte body:

<meta http-equiv="refresh" content="0; url=/en/"> and <title>AXY Marketing</title>

That page has no canonical, no description, no hreflang and no content. Because it answers 200 rather than 301, Google can index it as a separate URL competing with /en/.

AddressResponseGoes to
http://axyglobal.com301https://axyglobal.com/
http://www.axyglobal.com301https://www.axyglobal.com/
https://www.axyglobal.com301https://axyglobal.com/
https://axyglobal.com/200 meta refresh/en/ via HTML

Note the second row: a visitor typing www without https goes through two redirects before reaching the site, then a third hop through the meta refresh. A _redirects rule collapses this to one.

3 Publish robots.txt and sitemap.xml Add robots.txt and sitemap.xml to the deploy root. The sitemap should list /en/ and /ru/ with their hreflang pairs. Reference the sitemap from robots.txt, then submit it in Google Search Console and Bing Webmaster Tools. Google rankings · Index quality · AI answers Both files are missing and the server answers with Netlify's "Page not found" screen. Search engines and AI crawlers look for them on every visit and find nothing, so there is no list of pages to crawl and no way to steer the crawl. For a site this small a sitemap is a ten line file that removes all guesswork. $802 h
Technical details
FileResponseWhat is served instead
/robots.txt404Netlify default "Page not found" HTML
/sitemap.xml404Netlify default "Page not found" HTML

Because robots.txt is absent, every crawler including GPTBot, ClaudeBot and PerplexityBot is allowed by default. That is the outcome you want here, but it is currently an accident rather than a decision. Publishing the file lets you keep the allow and add the sitemap line.

The seven addresses that should be covered:

URLTypeIn sitemap
/en/Home, EnglishYes
/ru/Home, RussianYes
/privacy-policy-en.htmlPolicy, EnglishNo, marked noindex
/refund-policy-en.htmlPolicy, EnglishNo, marked noindex
/privacy-policy.htmlPolicy, RussianNo, marked noindex
/refund-policy.htmlPolicy, RussianNo, marked noindex
/Holding pageNo, becomes a 301 in task 2

Worth knowing: a site:axyglobal.com lookup on Bing and DuckDuckGo returns no pages at all. That check is not authoritative and Google refused the same query from our network, so treat it as a prompt to open Search Console and confirm coverage rather than as proof. Tasks 1, 2 and 3 are the three things that would cause exactly this result.

4 Stop loading Tailwind from the CDN Remove <script src="https://cdn.tailwindcss.com"> and build the stylesheet at deploy time with the Tailwind CLI, then link the compiled CSS file. The visual result is identical. Desktop speed · Mobile speed · Google rankings That script downloads the whole Tailwind engine and builds the site's CSS inside the visitor's browser on every single visit. It is the reason the browser sits blocked for 1,850 ms on desktop and why desktop performance is 52, worse than mobile. Tailwind's own documentation states this script is for trying things out and must not be used on a live site. $1203 h
Technical details
MetricMobileDesktopTarget
Performance score685290+ desktop, 70+ mobile
Total blocking time220 ms1,850 msunder 200 ms
Time to interactive9.4 s3.7 sunder 3.8 s
Unused JavaScript273 KB276 KBnear zero

Scripts loaded from other people's servers, 9 script requests totalling 792 KB:

  • https://cdn.tailwindcss.com compiles CSS in the browser, the main cost
  • https://unpkg.com/lucide@latest/dist/umd/lucide.min.js icon library, version not pinned
  • https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css a second icon set

Two icon libraries are loaded for one page. Compiling Tailwind ahead of time also removes the 18 KB of unused CSS rules Lighthouse reports, because the build step strips every class the site does not use.

5 Compress the 5.2 MB banner video Re-encode banner.mp4 to H.264 at a sensible bitrate and add a WebM version, target under 800 KB. Add a poster image so something appears instantly, and drop autoplay on mobile in favour of the poster. Mobile speed · Google rankings · Mobile data cost The hero video is 5.18 MB and starts downloading and playing the moment the page opens. It is nearly half the page weight and the main reason the largest element on mobile takes 5.1 seconds to appear. Visitors on a phone connection pay for it before they read a single word. $802 h
Technical details

https://axyglobal.com/banner.mp4 returns content-length: 5427497, which is 5.18 MB of video/mp4.

Current markup: <video autoplay loop muted playsinline><source src="banner.mp4"></video>. There is no poster, no preload="none" and no WebM alternative.

Resource groupRequestsTransferredShare of page
Media (video)25,321 KB46%
Images255,287 KB45%
Scripts9792 KB7%
Fonts3186 KB2%
Stylesheets221 KB0%
Total5011,641 KB100%
6 Convert 7.6 MB of images to WebP Convert all 30 images to WebP at quality 80 and serve them through a <picture> element with a JPEG fallback. The five files over 500 KB are the priority. Photographs saved as PNG are the main waste. Mobile speed · Desktop speed · Google rankings Not one image on the site uses a modern format: 29 are JPEG and 20 are PNG. Team photos and screenshots are saved as PNG, which is built for flat graphics and roughly triples the size of a photograph. Converting them typically removes 60 to 80 percent of the weight with no visible difference. $1203 h
Technical details

30 unique images, 7.59 MB total, 0 in WebP or AVIF. 9 files are over 200 KB and 5 are over 500 KB.

FileFormatSizeNote
image.pngPNG1,610.8 KBlargest single asset
team/max.pngPNG1,119.2 KBphoto saved as PNG
team/azat.pngPNG951.3 KBphoto saved as PNG
portfolio/Tik tok/2.pngPNG771.6 KBscreenshot
portfolio/Tik tok/1.pngPNG564.4 KBscreenshot
portfolio/shopify/3.pngPNG351.4 KBscreenshot
portfolio/shopify/2.pngPNG346.0 KBscreenshot
portfolio/shopify/1.pngPNG280.2 KBscreenshot
portfolio/amazon/2.jpgJPEG203.5 KB
portfolio/amazon/3.jpgJPEG182.0 KB
portfolio/Tik tok/3.jpgJPEG178.4 KB
team/evhenii.jpgJPEG134.9 KB
portfolio/amazon/4.jpgJPEG127.1 KB
team/ivan.jpgJPEG121.6 KB
portfolio/amazon/1.jpgJPEG104.9 KB
review/telegram-cloud-photo-...432149-y.jpgJPEG101.9 KBreview screenshot
review/telegram-cloud-photo-...432133-y.jpgJPEG98.4 KBreview screenshot
review/telegram-cloud-photo-...432162-y.jpgJPEG91.7 KBreview screenshot

Remaining 12 files are each under 90 KB and account for the balance of the 7.59 MB.

7 Add lazy loading and size attributes to images Add width and height to the 41 image tags that lack them, and loading="lazy" plus decoding="async" to every image below the first screen. Leave the logo and hero eager. Mobile speed · Google rankings · Mobile data cost Only 10 of 51 images wait until they are scrolled into view, so the browser fetches team photos and case screenshots that most visitors never reach. Declared width and height let the browser reserve the right space before the file arrives, which protects the layout stability the site currently has. $601.5 h
Technical details
CheckCountOf total
Image tags in the HTML52100%
Missing both width and height4179%
No loading attribute in source4281%
Lazy loaded in the rendered page1020%

Layout shift is currently 0 because Tailwind aspect ratio classes hold the space. Once the CDN script is replaced in task 4 that protection depends on the compiled CSS shipping those same classes, so adding real width and height attributes makes the fix durable rather than incidental.

8 Put the 10 services into the HTML Render the servicesData cards into the page source at build time instead of creating them with document.createElement after load. Keep the click-to-open popup behaviour in JavaScript, but the names and descriptions must exist in the HTML. AI answers · Google rankings · Index quality All ten service names are built by a script after the page loads. Google will usually run that script, but ChatGPT, Perplexity and Claude read the raw HTML and do not. So when someone asks an AI assistant for an Amazon or TikTok Shop agency, the ten phrases that describe exactly what AXY sells are invisible to it. $1203 h
Technical details

The services grid is filled in by this loop, so the titles only exist inside a JavaScript template string:

servicesData.forEach(service => { ... card.innerHTML = `<h3 ...>${service.title}</h3>` ... })

Counting headings with scripts stripped out shows the gap between what a text-only crawler sees and what a browser sees:

SourceHeadingsH3H4
Full HTML including script contents671941
Static markup only, scripts removed29184

The ten service names missing from the static HTML, each one a phrase people actually search for:

  • Amazon Brand Launch & Management
  • US Company Registration
  • PPC Advertising (Setup & Management)
  • Meta & Google Ads Advertising
  • Shopify Store Creation
  • China Factory Sourcing
  • AXY Studio: Photo, Video, 3D, Design
  • SMM: Strategy, Content, Growth
  • Amazon KDP Book Launch
  • TikTok Shop Management

The case study details behind the ten portfolio cards live in a second script array, casesData, and have the same problem.

Critical subtotal · 17 hours$680
Medium
Next month. Content depth, structured data for AI answers, accessibility failures and the server headers.
#TaskWhat to doWhat it affectsWhy it mattersBudget · Time
9 Write real copy for the services and cases Expand the page past 1,000 words of genuine text, or split the ten services into their own pages. Each service needs a paragraph explaining what is delivered, for whom, and what the result looks like. Each case needs the numbers spelled out in text, not only inside a screenshot. Google rankings · AI answers · Conversion The whole page holds 316 words once rendered. Competing agency sites answer specific questions across many pages, so Google has far more to match a search against than AXY offers. Results are currently shown as image screenshots, which neither Google nor an AI assistant can read as evidence. $1604 h
Technical details
PageVisible wordsAssessment
/en/ rendered in a browser316Thin
/ru/ source text605Thin
/refund-policy-en.html805Marked noindex
/privacy-policy-en.html382Marked noindex

The ten portfolio cards are headed only by a product category (Mushroom-Shaped Humidifier, Auto Parts (LED Bulbs), Kids Furniture, Diamond Painting, Beauty Brand, DIY Craft Kits, Fashion Apparel, Firearm Accessories, Toys & Hobby, Jewelry). The revenue figures behind them sit in the casesData script and in JPEG screenshots, so they cannot be quoted by a search engine or an AI assistant.

Ten separate service pages would also give the site something it has none of today: internal links between pages. Every one of the 30 internal links on the page is a jump to a section of the same page.

10 Fill out the company schema Extend the JSON-LD block: switch @type from Corporation to ProfessionalService, add sameAs with the LinkedIn, Instagram and Facebook URLs already in the footer, plus address, telephone, foundingDate and founder. AI answers · Trust · Rich results AI assistants read company facts from this block rather than from the page text. Today it carries six fields and no link to any social profile, so an assistant asked "who is AXY Marketing" has nothing to confirm the company is real or connect it to its LinkedIn presence. The social links are already on the page and just need listing in the code. $601.5 h
Technical details

The page carries exactly one JSON-LD block. It is valid but minimal:

{"@type":"Corporation","name":"AXY Marketing","url":"https://axyglobal.com","logo":".../logo.png","contactPoint":{"email":"account@axyglobal.com","contactType":"customer service"},"description":"...","hasOfferCatalog":{...}}

FieldPresentValue available on the page
sameAsNoLinkedIn, Instagram, Facebook all in the footer
telephoneNoWhatsApp number 380990699094
addressNoNot published anywhere on the site
founderNoTeam section names six people
foundingDateNoNot published anywhere on the site
aggregateRatingNoClient reviews section exists
email, logo, descriptionYes

The social profiles to list in sameAs: https://www.linkedin.com/in/azat-shakurov/, https://www.instagram.com/axy_co, https://www.facebook.com/profile.php?id=61556339652549.

11 Add FAQ, Service and WebSite structured data Add a visible FAQ section with six to eight real questions and mark it up as FAQPage. Add a Service block for each of the ten services and one WebSite block with the site name. AI answers · AI shopping assistants · Rich results None of these exist today. AI assistants answer questions by quoting content already shaped as a question and answer, so a page with no FAQ rarely gets cited. Buyers ask the same things every time: what it costs, how long a launch takes, which countries you cover, what happens if it does not work. $802 h
Technical details

Structured data present across all 7 pages of the site:

Schema typePages with itExpected for this site
Corporation2 of 7Present, needs fields (task 10)
FAQPage0 of 7Missing
Service as a top level block0 of 7Missing, only nested in OfferCatalog
WebSite0 of 7Missing
BreadcrumbList0 of 7Not needed, the site is one page deep
Review or AggregateRating0 of 7Missing, reviews are image only

The four policy pages carry no structured data at all, which is fine since they are set to noindex.

The two services already described inside hasOfferCatalog (Full Brand Launch, Free Store Audit) are a good starting template. The other eight from task 8 need the same treatment.

12 Give the 22 buttons accessible names Add aria-label to the 19 buttons that have none. The mobile menu button, the popup close buttons and the case detail buttons are the ones Lighthouse names. Accessibility · AI understanding of pages · Mobile usability Buttons that contain only an icon have no text for a screen reader or a crawler to read, so they announce as "button" with no purpose. Lighthouse fails this outright on mobile and it is one of the four reasons the accessibility score sits at 80. $601.5 h
Technical details

22 <button> elements in the HTML, 3 with an aria-label. Lighthouse audit button-name fails on mobile and names header.sticky > div.mx-3 > div.container > button#mobile-menu-button first.

Accessibility score by device and the audits behind it:

DeviceScoreFailing audits
Mobile80color-contrast, button-name, meta-viewport, heading-order
Desktop92meta-viewport, heading-order

Separately, 13 links and buttons are smaller than the 44 by 44 pixel minimum on a 390 pixel wide screen, including the mobile menu button and the case detail buttons.

13 Allow visitors to zoom on mobile Change the viewport tag to width=device-width, initial-scale=1.0 by removing maximum-scale=1.0 and user-scalable=no. Accessibility · Mobile usability · Google rankings The page currently blocks pinch to zoom on phones. Anyone who needs to enlarge text to read it cannot, and Lighthouse fails this on both mobile and desktop. It is a two word deletion. $200.5 h
Technical details

Current tag on /en/ and /ru/:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

Lighthouse: "[user-scalable="no"] is used in the meta name="viewport" element ... user-scalable=no on meta tag disables text scaling."

The four policy pages already use the correct short form, so only the two main pages need editing.

14 Fix the heading order Change the footer headings ("Navigation", "Contacts", "Contact Us") from h4 to h3, and review the 41 h4 elements so no heading skips a level below its parent h2. Accessibility · AI understanding of pages · Google rankings The page jumps straight from an h2 to an h4 with nothing in between, so the outline reads as though a section is missing. Search engines and AI assistants use that outline to work out which parts of the page belong together, and screen readers use it to navigate. $401 h
Technical details

Heading counts on /en/, identical on /ru/: 1 h1, 6 h2, 19 h3, 41 h4. One level skip, from h2 straight to h4.

Lighthouse heading-order fails on both devices and names div.container > div.grid > div > h4.font-semibold with the label "Navigation", which is the footer column heading.

There are 41 h4 elements against 19 h3, an inverted shape. Normally the deeper level is the rarer one. Most of the h4 count comes from the service and case popups.

Two empty h3 elements exist, #service-modal-title and #case-modal-title. Those are popup placeholders filled in by script when a card is clicked and are not a problem.

15 Add the missing security headers Add a Netlify _headers file setting Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy and Permissions-Policy. Extend the existing HSTS header with includeSubDomains and preload. Trust · Security · Index quality The server sends only one security header today. Without X-Frame-Options another site can load AXY inside a frame and pass it off as their own, and without X-Content-Type-Options a browser can be tricked into running a file as a script. None of this changes how the site looks. $601.5 h
Technical details
HeaderPresentCurrent value
Strict-Transport-SecurityYesmax-age=31536000, no includeSubDomains, no preload
Content-Security-PolicyNo
X-Frame-OptionsNo
X-Content-Type-OptionsNo
Referrer-PolicyNo
Permissions-PolicyNo

Write the CSP after task 4 lands, since removing the Tailwind CDN and the two icon libraries shortens the list of allowed sources considerably. Set it to report only for a week before enforcing.

16 Remove the duplicate Clarity tag Delete one of the two Microsoft Clarity snippets in the head. Decide which project ID is the live one, keep that, remove the other. Mobile speed · Data accuracy Two separate Clarity trackers load on every page view, each opening its own connection and recording the same session twice. One of them is collecting data nobody looks at, and both slow the page down. $200.5 h
Technical details

Two identical Clarity loader blocks sit back to back in the head of both /en/ and /ru/, with different project IDs:

  • clarity.ms/tag/vtlc6avxzj
  • clarity.ms/tag/wqhxb45k2d

Other tracking on the page, all correctly installed once: Google Tag Manager GTM-WR5634BL, Meta Pixel 1285343753046437, plus a Facebook domain verification tag. There is no direct GA4 gtag snippet, which is correct if GA4 is fired through Tag Manager.

23 of the 50 requests on the page go to third party domains, totalling 1,007 KB.

17 Fix the run-together words in the main heading In the h2 "We Impact Specific Metrics and<br>Increase Your Net Profit in Your Pocket", add a space before the line break so the text reads correctly when the markup is stripped. Google rankings · AI answers · Trust A line break sits directly between two words with no space, so every system that reads the page as plain text sees "andIncrease" as one word. That includes Google, AI assistants and screen readers. On screen it looks fine, which is why it has gone unnoticed. $200.5 h
Technical details

Current markup:

<h2 class="section-title">We Impact Specific Metrics and<br><span class="text-color-animate" data-text-animate>Increase Your Net Profit</span> in Your Pocket</h2>

Extracted text: We Impact Specific Metrics andIncrease Your Net Profit in Your Pocket

Fix by putting a space before <br>, or by wrapping each line in its own block element. The Russian page has the same pattern in the matching h2 and needs the same edit.

18 Fix contrast on the WhatsApp and Telegram buttons Darken the green and blue backgrounds on the messenger buttons, or switch their label text to a darker colour, until the contrast ratio reaches 4.5 to 1. Accessibility · Conversion · Mobile usability White text on the current green and light blue backgrounds falls below the readable minimum, and Lighthouse fails it on mobile. These two buttons are the main way to start a conversation, so they are the worst place on the site to have text that is hard to read in daylight. $401 h
Technical details

Lighthouse color-contrast fails on mobile. Elements named:

  • <a href="https://wa.me/380990699094" class="bg-green-500 hover:bg-green-600 text-...">
  • div > div.mt-4 > a.bg-sky-500 > span with the label "Message on Telegram"

Tailwind green-500 is #22c55e and sky-500 is #0ea5e9. White text on either lands near 2.3 to 1, against a 4.5 to 1 requirement. Moving to green-700 and sky-700 clears it while keeping the brand colours recognisable.

19 Rename the "Tik tok" image folder Rename portfolio/Tik tok/ to portfolio/tiktok/ and update the four image paths that point into it. Google Images · Index quality The folder name contains a space and a capital letter, so every URL inside it is served as Tik%20tok. Encoded spaces in paths are a common source of broken links when URLs get copied, shared or rewritten, and they make the filename useless as a description of the image. $401 h
Technical details

Affected files, all reachable but only via the encoded form:

Path in the HTMLActual requestSize
portfolio/Tik tok/1.pngportfolio/Tik%20tok/1.png564.4 KB
portfolio/Tik tok/2.pngportfolio/Tik%20tok/2.png771.6 KB
portfolio/Tik tok/3.jpgportfolio/Tik%20tok/3.jpg178.4 KB

Do this at the same time as the WebP conversion in task 6, since those three files are being rewritten anyway. Descriptive names such as tiktok/case-humidifier.webp also help the images surface in Google Images.

Medium subtotal · 15 hours$600
Low, but worth doing
Refinements once the items above are shipped.
#TaskWhat to doWhat it affectsWhy it mattersBudget · Time
20 Drop the third party icon libraries Replace Font Awesome and Lucide with inline SVG for the icons actually used, or self host a subset. If Lucide stays, pin it to a fixed version instead of @latest. Mobile speed · Security · Reliability Two separate icon libraries load from two outside servers for a handful of icons. Loading @latest means whatever the library authors publish tomorrow runs on the site automatically, with no review, and if either server is slow or down the page waits on it. $601.5 h
Technical details
  • https://unpkg.com/lucide@latest/dist/umd/lucide.min.js unpinned version
  • https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css pinned, but a full icon set

Font loading accounts for 186 KB across 3 requests, most of it icon fonts rather than text fonts. The page declares only 2 preconnect hints and no preload, so each third party host costs a fresh DNS lookup and TLS handshake before anything downloads.

21 Publish an llms.txt file Add /llms.txt describing the company, the ten services, the markets served and how to get in touch, in plain Markdown. AI answers · AI shopping assistants A growing number of AI assistants check this file first to understand what a site offers before reading the pages. It costs one file and gives AXY a controlled summary in the exact form assistants prefer, instead of leaving them to guess from a page whose services load by script. $401 h
Technical details
FileResponse
/llms.txt404
/llms-full.txt404
/agents.md404
/.well-known/security.txt404
/humans.txt404

Worth pairing with task 8. If the services move into the HTML and an llms.txt lists them as well, the ten service phrases become readable by every assistant whether or not it runs JavaScript.

22 Give the policy pages descriptions and canonicals Add a meta description and a self referencing canonical to all four policy pages. Change noindex, nofollow to noindex, follow. Trust · Index quality The four policy pages have no description and no canonical. The nofollow part also tells search engines to ignore every link on those pages, including the ones back to the main site, which serves no purpose. $401 h
Technical details
PageTitleCharsDescriptionCanonicalRobots
/privacy-policy-en.htmlPrivacy Policy, AXY Marketing30NoneNonenoindex, nofollow
/refund-policy-en.htmlRefund and Cancellation Policy46NoneNonenoindex, nofollow
/privacy-policy.htmlRussian privacy policy43NoneNonenoindex, nofollow
/refund-policy.htmlRussian refund policy42NoneNonenoindex, nofollow

These pages also carry no hreflang, so the English and Russian versions of the same policy are not linked to each other. Low impact while they stay noindex, but worth adding in the same pass.

23 Publish a phone number and an address Add a clickable tel: link and a business address to the footer, then mirror both into the company schema from task 10. Trust · AI answers · Conversion The site offers an email address and two messenger links but no phone number and no location of any kind. For an agency asking clients to hand over an Amazon account, that absence is the first thing a careful buyer notices, and it leaves AI assistants unable to say where the company is based. $401 h
Technical details
Contact signalPresentDetail
EmailYesaccount@axyglobal.com
WhatsAppYeswa.me/380990699094
TelegramYest.me/vanya_yarmosh
Clickable phone (tel:)NoZero tel links on the page
Postal addressNoNo address element anywhere
MapNoNo map embed

The WhatsApp number is a Ukrainian mobile. If the company presents itself as US facing, publishing the registered entity and country removes an obvious question rather than creating one.

24 Clean up the three dead links Find the three anchors with href="#" and either point them at a real section or turn them into buttons. Add rel="noopener noreferrer" to the two external links that lack it. Index quality · Security · Conversion A link to # jumps the visitor back to the top of the page, which reads as a broken link. Separately, two links open in a new tab without rel="noopener", which lets the opened page take control of the tab it came from. $200.5 h
Technical details

3 anchors use href="#". All 30 internal links on the page are same page jumps: #cases, #team, #contacts, #audit.

External links opening in a new tab without rel:

  • https://wa.me/380990699094 with target="_blank", no rel
  • https://t.me/vanya_yarmosh with target="_blank", no rel

The same two destinations appear elsewhere on the page correctly carrying rel="noopener noreferrer", so this is an inconsistency rather than a policy. The client site links (davika.com, brainrichkids.com, michaelgabriels.com) and all three social links are already correct.

25 Remove the emoji from the h1 and the keywords tag Delete the rocket emoji from the start of the h1 so the heading opens on the words that matter, and remove the obsolete <meta name="keywords"> tag from both pages. Google rankings · Click-through from Google · Trust The h1 is the strongest single signal of what a page is about, and it currently opens with a decoration instead of a keyword. The keywords tag has been ignored by Google since 2009 and does nothing except publish your target keyword list to competitors. $200.5 h
Technical details

Current h1 on /en/: 🚀 Launch & Scale Your Brand on <span>Amazon, TikTok Shop & Shopify</span>

Current keywords tag: <meta name="keywords" content="e-commerce, Amazon promotion, TikTok Shop marketing, Shopify store, AXY Marketing, store audit, PPC, SEO">

Both pages carry exactly one h1, which is correct. The title tag itself is well formed at 63 characters on English and 67 on Russian, slightly over the 60 character mark where Google starts truncating, so trimming a few words there is worth doing in the same pass.

PageTitle charsDescription charsVerdict
/en/63141Title slightly long
/ru/67153Title slightly long
Low, but worth doing subtotal · 5.5 hours$220
Total · 37.5 hours
$1,500