Canvas Catalog lets institutions offer public-facing courses and programs. One powerful feature is certificates of completion, which you can customize to match your branding and layout preferences.
Requirements Before You Begin
- Admin access to Canvas Catalog.
- A published course or program in your catalog.
- A publicly hosted background certificate image (e.g., yourwebsite/images/certificates/traditional.png).
- A custom HTML template (Provided)
- Basic understanding of HTML/CSS.
Step-by-Step: Adding a Custom Certificate
1. Navigate to Canvas Catalog Admin
- Go to: yourcatalog.region.catalog.canvaslms.com/admin
- Log in as a Catalog Admin.
2. Enable Certificate for a Listing
- Go to the Listings tab.
- Choose the course/program you want to assign the certificate to.
- Click on “Certificate”.
- Enable Include Certificate
- Enter a Certificate Name
3. Select "Custom HTML/CSS"
4. Add Your Custom HTML/CSS Template
- Paste the provided custom code into the HTML editor box.
Custom Template Code:
<!DOCTYPE html> <html lang="{{locale}}"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Vintage Certificate of Completion</title> <!-- Use a suitable fallback font --> <link rel="preconnect" href="<https://fonts.googleapis.com>"> <link rel="preconnect" href="<https://fonts.gstatic.com>" crossorigin> <link href="<https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;700&display=swap>" rel="stylesheet"> <style> :root { --skintone-color: #DE9B72; --dark-color: #3A3D3E; --main-font: 'Cormorant Garamond', serif; } body { padding: 0; margin: 0; height: 100vh; display: flex; justify-content: center; align-items: center; background-color: var(--dark-color); } /* --- New, refactored CSS for the dynamic border --- */ .certificate-container { position: relative; /* Set a landscape aspect ratio */ aspect-ratio: 11 / 8.5; /* US Letter landscape ratio */ width: 95%; max-width: 1200px; margin: 0 auto; display: flex; justify-content: center; flex-direction: column; text-align: center; /* Adjusted padding for landscape layout */ padding: 4% 6%; /* Background image and linear gradient */ background-image: url(<https://altersity.odoo.com/web/image/899-e0529c61/output-onlinepngtools.webp>), linear-gradient(to right, rgba(58, 61, 62, 1) 0%, rgba(58, 61, 62, 1) 100%); background-size: cover; background-repeat: no-repeat; background-position: center; /* First decorative border (outer) */ border: 2px solid var(--skintone-color); } /* Second decorative border (middle) using a pseudo-element */ .certificate-container::before { content: ''; position: absolute; top: 6px; left: 6px; right: 6px; bottom: 6px; border: 6px solid var(--skintone-color); } /* Third decorative border (inner) using a pseudo-element */ .certificate-container::after { content: ''; position: absolute; top: 18px; left: 18px; right: 18px; bottom: 18px; border: 2px solid var(--skintone-color); } /* Decorative corner images */ .corner-decoration { position: absolute; width: 4em; height: auto; } .corner-left-top { top: 0; left: 0; } .corner-right-top { top: 0; right: 0; transform: scaleX(-1); } .corner-left-bottom { bottom: 0; left: 0; transform: scaleY(-1); } .corner-right-bottom { bottom: 0; right: 0; transform: scale(-1); } /* Decorative vertical images */ .vertical-decoration { position: absolute; width: 16em; height: auto; left: 50%; transform: translateX(-50%); } .vertical-decoration.top { top: 0; } .vertical-decoration.bottom { bottom: 0; transform: scaleY(-1) translateX(-50%); } /* Typography and content styling */ .skintone-text { color: var(--skintone-color); } .white-text { color: #fff; } .logo { width: 12em; margin-bottom: 2rem; } h1 { font-size: 2.5em; letter-spacing: 5px; padding-top: .5em; font-family: var(--main-font); text-transform: uppercase; } .lead { font-size: 1.5rem; padding-top: 0.5em; font-family: var(--main-font); } p.general { font-size: 1.25em; margin-bottom: 0.5em; line-height: 1.5em; } .signature { margin-top: 2rem; } .signature-line { border-top: 1px solid var(--skintone-color); padding-top: 0.5em; display: inline-block; text-align: center; width: 15rem; } @media (max-width: 768px) { .certificate-container { aspect-ratio: 1 / 1.414; /* Switch to portrait for mobile */ height: 95vh; width: 95%; padding: 4%; } .logo { width: 10em; } h1 { font-size: 1.8em; } .lead { font-size: 1.25rem; } .corner-decoration { width: 2.5em; } .vertical-decoration { width: 10em; } } </style> </head> <body> <!-- The main certificate container that handles all borders --> <div class="certificate-container"> <!-- Corner and vertical decorations (images should be uploaded to Canvas and paths updated) --> <img class="corner-decoration corner-left-top" src="<https://i.ibb.co/4mKvK3N/corner-decoration.jpg>" alt="Decoration"> <img class="corner-decoration corner-right-top" src="<https://i.ibb.co/4mKvK3N/corner-decoration.jpg>" alt="Decoration"> <img class="corner-decoration corner-right-bottom" src="<https://i.ibb.co/4mKvK3N/corner-decoration.jpg>" alt="Decoration"> <img class="corner-decoration corner-left-bottom" src="<https://i.ibb.co/4mKvK3N/corner-decoration.jpg>" alt="Decoration"> <img class="vertical-decoration top" src="<https://i.ibb.co/JRTK9z4/horizontally-centered-vertical-decoration.png>" alt="Decoration"> <img class="vertical-decoration bottom" src="<https://i.ibb.co/JRTK9z4/horizontally-centered-vertical-decoration.png>" alt="Decoration"> <!-- Certificate Content --> <img class="logo" src="<https://www.altersity.com/web/image/website/1/logo/altersity?unique=a8464e6>" alt="Altersity"> <h1 class="text-uppercase white-text">{{t.certificate_of_completion}}</h1> <p class="lead skintone-text"> This is to certify that </p> <h2 class="lead white-text" style="font-size: 2.5rem; text-transform: uppercase; margin-bottom: 1rem;"> {{student_name}} </h2> <p class="lead skintone-text"> has successfully completed the course </p> <p class="general white-text" style="font-size: 2rem; font-weight: bold; margin-bottom: 2rem;"> {{course_name}} </p> <p class="skintone-text">on</p> <p class="white-text" style="font-size: 1.5rem; margin-bottom: 1rem;"> {{completion_date}} </p> <div class="signature"> <p class="skintone-text signature-line"> Instructor Name (Created by Iftiaj ) </p> </div> </div> </body> </html>
Output
5. Customization Options
Here are some design enhancements you can do to improve your custom certificate:
Feature | Option | Code Change |
---|---|---|
Logo | Center | <img src='logo.png' style='width:100px; margin:0 auto;'> |
Logo | Left Aligned | style='float: left;' |
Logo | Right Aligned | style='float: right;' |
Logo | Small/big | width: 10em; /* Increase this value to make the logo bigger, decrease to make it smaller */ |
Signature lines | Add more roles | Duplicate the .signature div section |
Fonts | Use Google Fonts | Add <link> in <head> |
Background | Custom Pattern | Update background-image CSS |
QR Code | Verification | Add <img src='{{certificate_qr_url}}'> |
6. Save the Certificate Template
- Click Save after pasting your HTML/CSS.
7. Test It
- Enroll in the course with a test account.
- Complete all course requirements.
- Confirm that the certificate appears with your custom design when completed.
Template Variables (Dynamic Data)
Canvas Catalog supports the following variables inside the certificate:
Variable | Description |
---|---|
{{student_name}} | Displays the learner’s full name |
{{completion_date}} | Displays the date the course was completed |
{{expiration_date_markup}} | Optional field for expiration date |
{{t.certificate_of_completion}} | Translatable text "Certificate of Completion" |
{{t.traditional_award_for}} | Translatable award text |
{{t.traditional_presented_by}} | Text like "Presented by [Organization]" |
Certificate Background Tips
- Image format: .png or .jpg
- Recommended size: 1123x795 pixels (for printable 11" x 8.5" format)
- Store it in a public asset folder, or host it on a trusted CDN.
Tips for Better Design
- Use a serif font like Georgia for formality.
- Avoid heavy colors or too many styles; simplicity looks professional.
- Align your text margins with empty space in the background image.
- Test for printing (PDF download support) if learners will print certificates.
Final Checklist
- [ ] Certificate feature enabled ✅
- [ ] Custom HTML/CSS added ✅
- [ ] Background image hosted ✅. Note: Catalog will use to Catalog Logo by default. Unless you change it.
- [ ] Variables render correctly ✅
- [ ] Test with a learner account ✅
Click Here to get all premium custom certificate templates
Subscribe to my newsletter