Let me just start by saying that you should ALWAYS use a child theme when you are doing customizations rather than implementing all changes in the parent theme. The reason for that is to avoid losing those customization whenever you upgrade your theme.
Having said that sometimes you find that the custom changes you made on that child theme are not showing on the frontend. Why is that? What is happening?
Here is a list to help you troubleshoot the problem:
Make sure your magento 2 child theme is set correctly
To create a child theme you must create the correct folder hierarchy and have all mandatory files.
A child theme, as any other theme, has a root folder, usually the Vendor name, and inside a theme folder, usually the theme name. This VendorName/ThemeName
hierarchy need to be inside the app/design/frontend
folder. So your final folder hierarchy will be
app/design/frontend/VendorName/ThemeName
Inside this folder is where all you files should reside. The ones that are mandatory to set up a theme are:
registration.php
theme.xml
The registration.php
file is responsible to register the theme in magento. It will look something like this:
<?php
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::THEME,
'frontend/VendorName/ThemeName',
__DIR__
);
The theme.xml
file describes to magento some attributes of the theme that you are creating, namely, and most importantly, the parent theme set under the parent
element. The simplest theme.xml
file will be similar to this:
<!--
/**
* Copyright © 2015 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
<title>Theme Name</title>
<parent>ParentVendorName/ParentThemeName</parent>
</theme>
When you clear your cache you will see that the theme will be registered and it will show in the backend under Content > Design > Themes

Check if your theme is NOT virtual
Internally, the registration process creates a new entry on the Theme
table in the database like is showing below

Notice that there is a type column with value 0 for our child theme, meaning that this is a physical (visible) theme. If this value is 1 (virtual) then your theme will NOT be taken into account when rendering your pages. If this is happening change that value to 0.
Check if you have not another theme scheduled
This is probably the most obvious and, for that, the most unlikely to be checked when you are troubleshooting this problem.

Go to Content > Design > Schedule
and make sure no other theme is set to be used! This happened to me once and I literally lost hours debugging before noticing that someone working before me set up the main theme in the schedule table!
Well, lesson learned… Now I always check it 🙂
Check if the page you are viewing is not set to use another theme
Finally confirm that the page you are viewing is not configured to use a specific theme in the admin or even in the code. The theme can be set per page in magento 2, overriding the default site’s theme. So, you need to check in the admin and ultimately in the site’s code.
Start with the admin and go to the page editing and look for the design tab. Confirm that it is not set to use another theme. Checking the code will be harder and you will need to look into the xml layout files that are used to build that page.